梳排序演算法

2021-09-23 21:43:53 字數 2221 閱讀 1839

梳排序(comb sort)是一種由wlodzimierz dobosiewicz於2023年所發明的不穩定排序演算法,並由stephen lacey和richard box於2023年四月號的byte雜誌中推廣。梳排序是改良自氣泡排序和快速排序。

在氣泡排序演算法中,只比較陣列中相鄰的二項,即比較的二項的間距(gap)是1,梳排序提出此間距其實可大於1,改自插入排序的希爾排序同樣提出相同觀點。梳排序中,開始時的間距設定為陣列長度,並在迴圈中以固定比率遞減,通常遞減率設定為1.24。在一次迴圈中,梳排序如同氣泡排序一樣把陣列從首到尾掃瞄一次,比較及交換兩項,不同的是兩項的間距不固定於1。如果間距遞減至1,梳排序假定輸入陣列大致排序好,並以氣泡排序作最後檢查及修正。

使用梳排序為一列數字進行排序的過程

例:88     7     79     64     55     98     48     52     4      13

第一趟:    gap=10/1.24=8

比較數值對: (88, 4), (7, 13)

結果為:4      7     79     64     55     98     48     52     88     13

第二趟:   gap=8/1.24=6

比較數值對: (4, 48), (7, 52), (79, 88), (64, 13)

結果為:4      7     79     13     55     98     48     52     88     64

第三趟:   gap=6/1.24=4

比較數值對: (4, 55), (7, 98), (79, 48)  交換後:4      7     48     13     55     98     79     52     88     64

繼續比較數值對:(13, 52), (55, 88), (98, 64)

結果為:4      7     48     13     55     64     79     52     88     98

第四趟:   gap=4/1.24=3

比較數值對: (4, 13), (7, 55), (48, 64), (13, 79), (55, 52), (64, 88), (79, 98)

結果為:4      7     48     13     52     64     79     55     88     98

第五趟:   gap=3/1.24=2

比較數值對: (4, 48), (7, 13), (48, 52), (13, 64), (52, 79), (64, 55), (79, 88), (55, 98),

結果為:4      7     48     13     52     55     79     64     88     98

第六趟:   gap=2/1.24=1

比較數值對: (4, 7), (48, 13), (52, 55), (79, 64), (88, 98)

結果為:4      7     13     48     52     55     64     79     88     98

演算法實現:

//

completed on 2014.10.8 21:27

//language: c99

////

//#include#includevoid swap(int *a, int *b) //

交換兩元素的值

void printarray(int a, int count) //

列印陣列元素

void combsort(int *a, int size)

++i;}}}

int main(void)

; int n = sizeof(a) / sizeof(*a);

printarray(a, n);

combsort(a, n);

printarray(a, n);

return

0;}

排序演算法之梳排序

基本思想 梳排序和希爾排序很類似。希爾排序是在直接插入排序的基礎上做的優化,而梳排序是在氣泡排序的基礎上做的優化。也是想希爾排序一樣,將待排序序列通過增量分為若干個子串行,然後對子序列進行一趟氣泡排序,一步步減小增量,直至增量為1。所以梳排序的最後一次排序是氣泡排序。梳排序增量是根據遞減率減小的,遞...

C 模板實現梳排序

梳排序是一種改進的氣泡排序演算法,通過比較元素彼此之間的步長位置這種方式先對資料進行預處理,在每次移動中,步長會越來越小,直至他等於1.這一理念就是在正式排序前先將一些大元素移動至陣列的底部.之後正式排序採用氣泡排序演算法來進行.大量試驗證明,步長縮短因子為1.3時,能達到較高的效率.梳排序的良好效...

經典演算法題每日演練 第二十四題 梳排序

這篇再看看乙個經典的排序,梳排序,為什麼取名為梳,可能每個梳都有自己的gap吧,大梳子gap大一點,小梳子gap小一點。氣泡排序上我們的選擇是相鄰的兩個數做比較,就是他們的gap為1,其實梳排序提出了不同的觀點,如果將這裡的gap設定為一定的大小,效率反而必gap 1要高效的多。下面我們看看具體思想...