C 希爾排序 個人筆記

2021-10-04 22:22:24 字數 1028 閱讀 4681

8,9,1,7,2,3,5,4,6,0

上面的陣列入如果用插入排序進行從大到小排列,需要移動的元素會很多,演算法效率不高,於是希爾這人就提出了優化的插入排序。

希爾排序是希爾(donald shell)於1959 年提出的一種排序演算法,希爾排序是一種插入排序的優化方案,是插入排序更高效的版本,也稱為縮小增量排序,它與插入排序不同的是,它會優先比較距離較遠的元素。

希爾排序是把記錄按陣列下標的一定增量分組,對每組進行插入排序,隨著增量逐漸減少,每組包含的元素逐漸增多,當增量減少到1時,所有的元素被分為一組,實際上等同於執行一 次插入排序,演算法便終止。

選擇增量 :gap=length/2,縮小增量:gap = gap/2 length代表陣列的長度 gap 增量

把每組資料看成乙個陣列 ,陣列中的第乙個元素看成乙個有序陣列,取出有序陣列的下乙個元素(新元素),與有序陣列中的元素比較,在合適的位置插入這個新元素,使之成為乙個新的有序陣列。

#include using namespace std;

void hillsort(int* arr, int len)

//因為經過preindex = preindex - gap所以要 + gap 才是current 要插入的位置

把上一節 插入排序沒講透的在這節**的注釋裡做了一點補充

筆記 希爾排序

插入排序 將待排序元素分為已排序子集和未排序子集,一次從未排序子集中的乙個元素插入已排序子集中,使已排序自己仍然有序 重複執行以上過程,指導所有元素都有序為止。希爾排序又稱為縮小增量排序,它也是一種屬插入排序類的方法,但在事件效率上較前述集中排序方法都有較大的改進。從對直接插入排序的分析得知,其演算...

C 希爾排序

基本思想 將整個待排序記錄 分割成若干個子串行,在子串行內分別進行直接插入排序,待整個序列中的記錄 基本有序 時,對全體記錄進行直接插入排序。子串行不是 被簡單的 逐段分割 而是將 相距某個 增量 的記錄組成乙個子串行,希爾排序開始時增量較大,每個子串行中的記錄個數較少,從而排序速度較快 當增量較小...

C 希爾排序

1 首先,從陣列的首元素開始每隔 步長 間隔 個元素就挑選乙個元素出來作為子陣列元素。2 然後每個子陣列各自進行比較,比較好後,每個子陣列都有順序,進入下一輪,步長 間隔 減少,再根據步長 間隔 分組進行比較。3 重複以上操作,最後就有順序了。include include using namesp...