希爾排序(Shell Sort)

2022-05-06 08:42:11 字數 814 閱讀 3900

希爾排序(shell sort)是插入排序的一種。因d.l.shell於2023年提出而得名。

先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中。先在各組內進行直接插人排序;然後,取第二個增量d2

該方法實質上是一種分組插入方法。

while(increment>1)

} //shellsort

注意:當增量d=1時,shellpass和insertsort基本一致,只是由於沒有哨兵而在內迴圈中增加了乙個迴圈判定條件"j>0",以防下標越界。

shell排序的執行時間依賴於增量序列。

好的增量序列的共同特徵:

①  最後乙個增量必須為1;

②  應該盡量避免序列中的值(尤其是相鄰的值)互為倍數的情況。

有人通過大量的實驗,給出了目前較好的結果:當n較大時,比較和移動的次數約在nl.25到1.6n1.25之間。

希爾排序的時間效能優於直接插入排序的原因:

①  當檔案初態基本有序時直接插入排序所需的比較和移動次數均較少。

②  當n值較小時,n和n2的差別也較小,即直接插入排序的最好時間複雜度o(n)和最壞時間複雜度0(n2)差別不大。

③  在希爾排序開始時增量較大,分組較多,每組的記錄數目少,故各組內直接插入較快,後來增量di逐漸縮小,分組數逐漸減少,而各組的記錄數目逐漸增多,但由於已經按di-1作為距離排過序,使檔案較接近於有序狀態,所以新的一趟排序過程也較快。

因此,希爾排序在效率上較直接插人排序有較大的改進。

希爾排序是不穩定的。參見上述例項,該例中兩個相同關鍵字49在排序前後的相對次序發生了變化。

希爾排序(Shell Sort)

希爾排序 shell sort 又叫做縮小增量排序 diminishing increment sort 是一種很優秀的排序法,演算法本身不難理解,也很容易實現,而且它的速度很快。基本思想 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中...

希爾排序 shellsort

希爾排序 shellsort 又叫增量遞減 diminishing increment 排序,是由d.l.shell發明的,這個演算法是通過乙個逐漸減小的增量使乙個陣列逐漸趨近於有序從而達到排序的目的。假設有乙個陣列int data 16 首先將這個增量設為16 2 8,這樣就將這個陣列分成了8個子...

希爾排序(ShellSort)

希爾排序 shellsort cpp view plain copy include shellsort.h include print.h 希爾排序,分組進行插入排序,最後一步仍然是插入排序,但是因為之前的操作使逆序數減少,所以相對單純的插入排序效率高。void shellsort inta,in...