雞尾酒排序也就是定向冒泡排序雞尾酒攪拌排序, 攪拌排序 (也可以視作[選擇排序的一種變形), 漣漪排序, 來回排序 or 快樂小時(shí)排序, 是冒泡排序的一種變形样勃。與冒泡排序的不同處在于排序時(shí)是以雙向在序列中進(jìn)行排序诵原。
排序過程:
先對(duì)數(shù)組從左到右進(jìn)行冒泡排序(升序),則最大的元素去到最右端
再對(duì)數(shù)組從右到左進(jìn)行冒泡排序(降序),則最小的元素去到最左端
以此類推,依次改變冒泡的方向,并不斷縮小未排序元素的范圍榜贴,直到最后一個(gè)元素結(jié)束.
核心代碼:
<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>
測(cè)試代碼:
<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>