排序算法——梳排序 Comb sort

梳排序(Comb sort)是一種不穩定的排序算法,它是冒泡排序的優化版本。其原理與希爾排序類似,在原始的冒泡排序算法中,每次只比較序列中的相鄰兩個元素,即比較的兩元素的間距(Gap)是1,而梳排序初始時兩兩比較的兩元素的間距比1大,並在循環中以固定的比率遞減,通常遞減率爲1.3,直到間距減小到1爲止。

遞減率的設定影響着梳排序的效率,原作者以隨機數作實驗,得到最有效遞減率爲1.3的。如果此比率太小,則導致一循環中有過多的比較,如果比率太大,則不能有效消除陣列中的烏龜(即在陣列尾部的小數值)。

以輸入數組 [8 4 3 7 6 5 2 1] 爲例

數組長度爲8,有8÷1.3=6,則比較8和2,4和1,並做交換

[8 4 3 7 6 5 2 1]

交換得

[2 1 3 7 6 5 8 4]

接着循環,更新間距爲6÷1.3=4,比較2和6,1和5,3和8,7和4

[2 1 3 7 6 5 8 4]

只有7和4需要交換,交換得

[2 1 3 4 6 5 8 7]

接着循環,更新距離爲3,沒有交換

接着循環,更新距離爲2,沒有交換

接着循環,更新距離爲1,需要三次交換

[2 1 3 4 6 5 8 7]

交換後的結果爲 [1 2 3 4 5 6 7 8] 即爲所求有序序列。

 

C++實現

#include<bits/stdc++.h>
using namespace std;

// To find gap between elements
int getNextGap(int gap)
{
    // Shrink gap by Shrink factor
    gap = (gap*10)/13;

    if (gap < 1)
        return 1;
    return gap;
}

// Function to sort a[0..n-1] 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章