雞尾酒排序,也就是定向氣泡排序, 雞尾酒攪拌排序, 是氣泡排序的一種變形。此演算法與氣泡排序的不同處在於排序時是以雙向在序列中進行排序。
使用雞尾酒排序為一列數字進行排序的過程
雞尾酒演算法原理
i. 先對陣列從左到右進行公升序的氣泡排序;
ii. 再對陣列進行從右到左的降序的氣泡排序;
iii. 以此類推,持續的、依次的改變冒泡的方向,並不斷縮小沒有排序的陣列範圍;
例: 88 7 79 64 55 98 48 52 4 13
第一趟: 7 79 64 55 88 48 52 4 13 98
第二趟: 4 7 79 64 55 88 48 42 13 98
第三趟: 4 7 64 55 79 48 42 13 88 98
第四趟: 4 7 13 64 55 79 48 42 88 98
第五趟: 4 7 13 55 64 48 42 79 88 98
第六趟: 4 7 13 42 55 64 48 79 88 98
第七趟: 4 7 13 42 55 48 64 79 88 98
第八趟: 4 7 13 42 48 55 64 79 88 98
#include#include與氣泡排序不同的地方:void swap(int *a, int *b) //
交換兩元素的值
void printarray(int a, int count) //
列印陣列元素
void cocktail_sort(int a, int size)
}//將未排序部分的最大元素交換到頂端
top = top - 1
;
for(i = top; i > bottom; i--)
}//將未排序部分的最小元素交換到底端
bottom = bottom + 1
; }
}int main(void
)
;
int n = sizeof(a) / sizeof(*a);
printarray(a, n);
cocktail_sort(a, n);
printarray(a, n);
return0;
}
雞尾酒排序等於是氣泡排序的輕微變形。不同的地方在於從低到高然後從高到低,而氣泡排序則僅從低到高去比較序列裡的每個元素。他可以得到比氣泡排序稍微好一點的效能,原因是氣泡排序只從乙個方向進行比對(由低到高),每次迴圈只移動乙個專案。
以序列(2,3,4,5,1)為例,雞尾酒排序只需要訪問一次序列就可以完成排序,但如果使用氣泡排序則需要四次。 但是在亂數序列的狀態下,雞尾酒排序與氣泡排序的效率都很差勁。
資料結構 雞尾酒排序
雞尾酒排序,名字很好聽.不過,這只是乙個對氣泡排序的乙個改進的演算法而已.這個演算法與氣泡排序不同的一點在於,他在氣泡排序從低到高進行一波排序之後,又從高到低進行一波排序,以此類推,因此,這個演算法也叫做定向氣泡排序 這個演算法與氣泡排序一樣,在面對亂序程度較高的資料的時候有著比較差的效能 loop...
排序演算法 雞尾酒排序
雞尾酒排序是一種在氣泡排序的基礎上進行改進的演算法。和氣泡排序的從陣列的一端乙個個排序到另一端的單方向的順序不同,雞尾酒排序的元素比較和交換的雙向的。雙向是什麼意思呢?就是說,對於雞尾酒排序,第一輪從左到右進行排序,這裡和氣泡排序一模一樣,但是第二輪就不一樣了,此時需要的是從右到左,換個方向進行排序...
雞尾酒演算法排序
一 什麼時雞尾酒排序?雞尾酒排序又稱為快樂小時排序,它基於氣泡排序進行的優化方案。二 雞尾酒演算法思想 氣泡排序是元素單向比較,而雞尾酒排序卻是雙向。列舉乙個最簡單的栗子array 2,3,4,5,6,7,8,9,1 如果按照傳統的氣泡排序進行操作,第一輪結果 2,3,4,5,6,7,8,1,9 只...