鸡尾酒排序也就是定向冒泡排序鸡尾酒搅拌排序, 搅拌排序 (也可以视作[选择排序的一种变形), 涟漪排序, 来回排序 or 快乐小时排序, 是冒泡排序的一种变形。与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
排序过程:
先对数组从左到右进行冒泡排序(升序),则最大的元素去到最右端
再对数组从右到左进行冒泡排序(降序),则最小的元素去到最左端
以此类推,依次改变冒泡的方向,并不断缩小未排序元素的范围,直到最后一个元素结束.
核心代码:
<pre><code>` func sort(arr:inout [Int]) {
if arr.count == 0 {
return
}
var left:Int = 0
var right:Int = arr.count - 1
var index:Int = 0
while left < right {
for i in left..<right {
if arr[i] > arr[i + 1] {
swap(&arr[i], &arr[i + 1])
index = i
}
}
right = index
let temp:Int = left + 1
if temp < right {
for i in (temp...right).reversed() {
if arr[i] < arr[i-1] {
swap(&arr[i], &arr[i-1])
index = i
}
}
left = index
}
}
}`</code></pre>
测试代码:
<pre><code>let cocktailSort:CocktailSort = CocktailSort() var arr:[Int] = [110, 9, 8, 1, 5, 4, 3, 2, 6, 7] cocktailSort.sort(arr: &arr) print("FlyElephant---鸡尾酒排序---\(arr)")
</code></pre>