排序演算法之希爾排序

2021-07-06 05:52:58 字數 702 閱讀 1175

希爾排序是對插入排序的一種改進,它其實是先將整個序列分為一些子串行,然後分別對這些子串行進行排序,排序後之後,再將整個序列分為比前一次序列規模大的子串行,再對這些子串行進行排序,繼續這樣的操作。直至將整個序列只分為乙個子串行,即序列本身。希爾排序其實上是將整個序列慢慢變的基本有序。

希爾排序比較重要的是增量序列。它利用增量序列將整個序列分割為多個子串行。

比如有序列 增量序列為

則先根據增量5分割序列為, , , , 並對這些子串行進行排序。, , , , ,則整個序列變為。

接下來,根據增量3分割序列為, , ,排序後為, , ,則整個序列為。

然後根據增量2分割序列, ,排序後為, ,則整個序列為。

最後增量為1,對整個序列進行排序。最終排序結果為。

typedef

int datatype;

int shellsort(datatype *array, int size)

while(increment > 1)

increment = increment / 3 + 1;

for(i = increment; i < size; i++)

array[j+increment] = array[j];

}array[j+increment] = temp;}}

return

0;}

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...

排序演算法之希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...

排序演算法之希爾排序

希爾排序,突破了 通過交換相鄰元素進行排序的任何演算法平均需要 n 2 的二次時間限制 通過比較相距一定間隔的元素來工作。使用乙個增量序列 h1 1,h2,ht,在使用乙個 增量h的一趟排序後,對於每乙個i滿足pdata i pdata i h 即此時序列是h排序的 各趟 比較所用的距離逐漸減小,直...