雞尾酒排序,也叫定向冒泡排序,是對冒泡排序的一種改進。
此算法與冒泡排序的不同處在於從低到高然後從高到低,而冒泡排序則僅從低到高去比較序列裏的每個元素。
他可以得到比冒泡排序稍微好一點的效能。
排序過程:
1.先對數組從左到右進行冒泡排序(升序),則最大的元素去到最右端
2.再對數組從右到左進行冒泡排序(降序),則最小的元素去到最左端
3.以此類推,依次改變冒泡的方向,並不斷縮小未排序元素的範圍,直到最後一個元素結束
代碼~
void Swap(int A[], int i, int j)
{
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
void cocktail_sort(int arr[], int len) {
int left = 0;// 初始化邊界
int right = n - 1;
while (left < right) {
for (i = left; i < right; i++) {
if (arr[i] > arr[i + 1]) {
Swap(A, i, i + 1);
}
right--;
}
for (i = right; i > left; i--) {
if (arr[i - 1] > arr[i]) {
Swap(A, i - 1, i);
}
left++;
}
}
}