Sorting algorithms/Cocktail sort with shifting bounds: Difference between revisions
Content added Content deleted
m (C - rewrote swap function) |
(Added Swift solution) |
||
Line 829: | Line 829: | ||
before: [5, 1, -6, 12, 3, 13, 2, 4, 0, 15] |
before: [5, 1, -6, 12, 3, 13, 2, 4, 0, 15] |
||
after: [-6, 0, 1, 2, 3, 4, 5, 12, 13, 15] |
after: [-6, 0, 1, 2, 3, 4, 5, 12, 13, 15] |
||
</pre> |
|||
=={{header|Swift}}== |
|||
{{trans|Rust}} |
|||
<lang swift>func cocktail_shaker_sort<T: Comparable>(_ a: inout [T]) { |
|||
var begin = 0 |
|||
var end = a.count |
|||
if end == 0 { |
|||
return |
|||
} |
|||
end -= 1 |
|||
while begin < end { |
|||
var new_begin = end |
|||
var new_end = begin |
|||
var i = begin |
|||
while i < end { |
|||
if a[i + 1] < a[i] { |
|||
a.swapAt(i, i + 1) |
|||
new_end = i |
|||
} |
|||
i += 1 |
|||
} |
|||
end = new_end |
|||
i = end |
|||
while i > begin { |
|||
if a[i] < a[i - 1] { |
|||
a.swapAt(i, i - 1) |
|||
new_begin = i |
|||
} |
|||
i -= 1 |
|||
} |
|||
begin = new_begin |
|||
} |
|||
} |
|||
var array = [5, 1, -6, 12, 3, 13, 2, 4, 0, 15] |
|||
print("before: \(array)") |
|||
cocktail_shaker_sort(&array) |
|||
print(" after: \(array)") |
|||
var array2 = ["one", "two", "three", "four", "five", "six", "seven", "eight"] |
|||
print("before: \(array2)") |
|||
cocktail_shaker_sort(&array2) |
|||
print(" after: \(array2)")</lang> |
|||
{{out}} |
|||
<pre> |
|||
before: [5, 1, -6, 12, 3, 13, 2, 4, 0, 15] |
|||
after: [-6, 0, 1, 2, 3, 4, 5, 12, 13, 15] |
|||
before: ["one", "two", "three", "four", "five", "six", "seven", "eight"] |
|||
after: ["eight", "five", "four", "one", "seven", "six", "three", "two"] |
|||
</pre> |
</pre> |
||