希爾排序基本思想

2021-06-06 22:19:50 字數 1301 閱讀 2971

基本思想:

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

1重複上述的分組和排序,直至所取的增量dt=1(dt

t-l<…2

1),即所有記錄放在同一組中進行直接插入排序為止。

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

給定例項的shell排序的排序過程

假設待排序檔案有10個記錄,其關鍵字分別是:

49,38,65,97,76,13,27,49,55,04。

增量序列的取值依次為:

5,3,1

排序過程如【動畫模擬演示】。

shell排序的演算法實現

1. 不設監視哨的演算法描述

void shellpass(seqlist r,int d)

while(increment>1)

} //shellsort

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

2.設監視哨的shell排序演算法

具體演算法【參考書目[12] 】

演算法分析

1.增量序列的選擇

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

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

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

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

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

2.shell排序的時間效能優於直接插入排序

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

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

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

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

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

3.穩定性

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

希爾排序法基本思想

希爾排序 shell sort 又稱為 縮小增量排序 是1959年由d.l.shell提出來的。該方法的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一...

氣泡排序基本思想

原理 比較兩個相鄰的元素,將值大的元素交換至右端。每次獲得 最大 的數 思路 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一...

氣泡排序的基本思想

1 氣泡排序的基本思想 氣泡排序是交換排序中一種簡單的排序方法。它的基本思想是對所有相鄰記錄的關鍵字值進行比效,如果是逆順 a j a j 1 則將其交換,最終達到有序化 其處理過程為 1 將整個待排序的記錄序列劃分成有序區和無序區,初始狀態有序區為空,無序區包括所有待排序的記錄。2 對無序區從前向...