插入排序演算法 希爾排序演算法 C 實現

2021-08-19 17:31:07 字數 1295 閱讀 3045

插入排序的基本思想是每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。常見的插入排序有插入排序(insertion sort),希爾排序(shell sort),二叉查詢樹排序(tree sort),圖書館排序(library sort),patience排序(patience sort)。下面介紹前兩種:

(一)直接插入排序

最差時間複雜度:o(n^2)

最優時間複雜度:o(n)

平均時間複雜度:o(n^2)

穩定性:穩定

直接插入排序(insertion sort),是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對未排序的資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

插入排序演算法的一般步驟:

1.從第乙個元素開始,該元素可以認為已被排序;

2.取出下乙個元素,在已經排序的元素序列中從後向前掃瞄;

3.如果該元素(已排序)大於新元素,將該元素移到下乙個位置;

4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;

5.將新元素插入到該位置後,重複2~5

演算法示意圖:

(二)希爾排序

平均時間複雜度:o(nlogn)

穩定性:不穩定

希爾排序(shell sort),也稱為遞減增量排序演算法,是插入排序的一種高速而穩定的改進版本。希爾排序是基於插入排序的以下兩點性質而提出改進方法的:1.插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率;2.但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位。

希爾排序的一般步驟為:

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

2.取第二個增量d2演算法示意圖:

插入排序演算法 希爾排序

插入排序演算法 希爾排序 希爾排序思想是將陣列每次分成不同的陣列同時進行排序,劃分的方式是設定增量值,即h length 2,h 2 與直接排序最大的不同就是比較的陣列值下標間隔不同。希爾排序在資料量龐大的時候進行排序效率高,時間短。觀察下圖,根據以上思想,進行移動。如下 include void ...

排序演算法 插入排序 希爾排序

1 相鄰資料之間相比較。先是1,0 然後2,1 1,0 以此類推 總結 大for從1 n 小for從i 0,之後判斷交換即可 public void charusort for int i 1 i a.length i 2 希爾排序是插入排序特殊化,他不再比相鄰資料,而是可以比較類似1,4,13.的...

java實現 排序演算法 插入排序,希爾排序

中心思想 每次拿出乙個數和已經排序好的一組數比較,假設a 比如在i 3時 a 0 a 2 已經排好序為 10,16,25 這時要插入a 3 這個數,先和a 2 比較也就是25比較,如果大於25則直接插入在index 3這個位置,如果小於,則讓25向後移一位也就是在index 3的位置 準備把inde...