排序演算法之梳排序

2021-07-08 14:34:36 字數 971 閱讀 5266

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

梳排序增量是根據遞減率減小的,遞減率的設定影響著梳排序的效率,原作者以隨機數作實驗,得到最有效遞減率為1.3的。

舉例:待排序序列為{8, 6, 5, 2, 1, 4, 3,7}

(1)初始increment = 8/1.3 =6。分為子串行{8, 3}{6, 7}{5}{2}{1}{4}進行一趟氣泡排序,得到{3, 6, 5, 2, 1, 4, 8, 7}

(2)increment = 6/1.3 = 4。分為子串行{3, 1}{6, 4}{5, 8}{2, 7}進行一趟氣泡排序,得到{1, 4, 5, 2, 3, 6, 8, 7}。

(3)increment = 4/1.3 = 3。分為子串行{1, 2, 8}{4, 3, 7}{5, 6}進行一趟氣泡排序,得到{1, 3, 5, 2, 4, 6, 8, 7}。

(4)increment = 3/1.3 = 2。分為子串行{1, 5, 4, 8}{3, 2, 6, 7}進行一趟氣泡排序,得到{1, 2, 4, 3, 5, 6, 8, 7}。

(5)increment = 2/1.3 = 1。分為子串行{1, 2, 4, 3, 5, 6, 8, 7}進行一趟氣泡排序,得到{1, 2, 3, 4, 5, 6, 7, 8}。

#define     lapse_rate  1.3

bool combsort(datatype *array, int size)

increment = size;

while(true) }}

if(increment <= 1)

}

return

true;

}

梳排序演算法

梳排序 comb sort 是一種由wlodzimierz dobosiewicz於1980年所發明的不穩定排序演算法,並由stephen lacey和richard box於1991年四月號的byte雜誌中推廣。梳排序是改良自氣泡排序和快速排序。在氣泡排序演算法中,只比較陣列中相鄰的二項,即比較的...

排序演算法之排序

private static void insertsort int ints 時間複雜度 o n 2 空間複雜度 o 1 private static void mergesort int ints,int left,int right private static void merge int ...

排序演算法 排序演算法之選擇排序

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...