雞尾酒排序就是冒泡排序改進的一種,不同於冒泡排序,雞尾酒是雙向的,它每一次都會先進行從左到右的升序排列,再從右到左的降序排列。
就像: 2,4,10,3,33
第一次:2,4,3,10,33
第二次:2,3,4,10,33
但是需要考慮的是他可能不需要到排完數組長度一半的次數就排完了,所以需要加一個判斷符,每次只要不需要排序就break出來。
先看看普通的冒泡排序:代碼如下
//冒泡排序
public static void BubbleSort(int[] arr) {
for (int i = 0; i < arr.Length; i++) {
for (int j = 1; j < arr.Length - i; j++) {
if (arr[j - 1] > arr[j]) {
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
}
再來看看改進的雞尾酒排序:
//雞尾酒排序
public static void MyCocktailSort(int[] arr) {
for (int i = 0; i <= arr.Length/2; i++) {
bool isContinue = true; //標識是否需要繼續排序
for (int front = i + 1; front < arr.Length - i; front++) {
if (arr[front - 1] > arr[front]) {
int temp = arr[front - 1];
arr[front - 1] = arr[front];
arr[front] = temp;
isContinue = false;
}
}
for (int back = arr.Length - i - 1; back >= i+1; back--) {
if (arr[back - 1] > arr[back]) {
int temp = arr[back - 1];
arr[back - 1] = arr[back];
arr[back] = temp;
isContinue = false;
}
}
if (isContinue) break;
}
}