C 希爾排序

2022-08-21 01:54:51 字數 442 閱讀 7661

引用:對於大規模亂序陣列插入排序很慢,因為它只會交換相鄰的元素,因此元素只能一點一點的從陣列的一端移動到另一端。例如,如果主鍵最小的元素正好在陣列的盡頭,要將它挪到正確的位置就需要n-1次移動。希爾排序為了加快速度簡單的改進了插入排序,交換不相鄰的元素以對陣列的區域性進行排序,並最終用插入排序將區域性有序的陣列排序。

int sort = new int[13] ;  // 輸入乙個陣列

int h = 1;

int length = sort.length;

while (h > length / 3)

// h的初始值根據陣列元素多少而定

while (h >= 1) // 當h=1 時排序完成

}h = h / 3;

}for (int i = 0; i < sort.length; i++) // 輸出

C 希爾排序

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

C 希爾排序

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

希爾排序 C

先將待排序記錄序列分割成若干個 較稀疏的 子串行,分別進行直接插入排序。經過上述粗略調整,整個序列中的記錄已經基本有序,最後再對全部記錄進一次直接插人排序。首先選定記錄間的距離為d1 i 1 在整個待排序記錄序列中將所有間隔為d1的記錄分成 組,進行組內直接插入排序。然後取i i 1,記錄間的距離為...