冒泡排序的優化算法——雞尾酒排序(Java語言描述)

雞尾酒排序是一種交換排序,可以作爲冒泡排序的改進算法。
其思路是:
從左到右比較移動一輪後,從右到左再移動一輪……
移動的形式像是“鐘擺”,可以將輪數減少一半。
雞尾酒排序自然也可以對有序區進行優化,但是這裏給出的代碼不包含該優化。

public static void sort(int[] array) {
    int tmp = 0;
    for (int i = 0; i < array.length/2; i++) {
        //有序標記,每一輪初始值都是true
        boolean isSorted = true;
        //奇數輪,從左向右比較和交換
        for (int j = i; j < array.length-i-1; j++) {
            if (array[j] > array[j+1]) {
                tmp = array[j];
                array[j] = array[j+1];
                array[j+1] = tmp;
                //所有元素交換,所以不是有序的,標記變爲false
                isSorted = false;
            }
        }
        if (isSorted) {
            break;
        }
        //在偶數輪之前,將isSorted重新標記爲true
        isSorted = true;
        //偶數輪,從右向左比較和交換
        for (int j = array.length-i-1; j > i; j--) {
            if (array[j] < array[j-1]) {
                tmp = array[j];
                array[j] = array[j-1];
                array[j-1] = tmp;
                //因爲有元素進行交換,所以不是有序的,標記變爲false
                isSorted = false;
            }
        }
        if (isSorted) {
            break;
        }
    }
}

雞尾酒排序的優缺點:

  • 優點:在特定條件,減少排序回合數。
  • 缺點:代碼量幾乎增加一倍。

在大部分元素已經有序的情況下,雞尾酒排序很合適。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章