Sorting algorithms/Cocktail sort with shifting bounds: Difference between revisions

Added Swift solution
m (C - rewrote swap function)
(Added Swift solution)
Line 829:
before: [5, 1, -6, 12, 3, 13, 2, 4, 0, 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>
 
1,777

edits