插入排序 C 實現

2021-07-22 18:55:02 字數 1373 閱讀 5363

插入排序的基本思想是每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。常見的插入排序有插入排序(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

演算法示意圖:

實現**:

void insertionsort(int *a, int len)

a[i+1] = key;

}}

(二)希爾排序平均時間複雜度:o(nlogn)

穩定性:不穩定

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

希爾排序的一般步驟為:

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

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

實現**:

void shellsort(int *a, int len)

a[i+h] = key;

} h = h/3;

}}

C 實現插入排序

感謝morewindows的文章,造福我等學渣啊 複雜度應該也是o n 2 using system using system.collections.generic using system.linq using system.text namespace 排序 if j i 1 將待插入的a i...

插入排序 C 實現

寫給自己!插入排序演算法,其如同打牌,手裡總是已經排好續的牌,而桌面上的是未知牌,其思想是 拿起一張牌,與手中的牌從右到左 從大到小 進行比較,找到合適的位置插入即可。插入排序演算法沒有合併排序算好效率高,他隨著輸入的增大而增大。思想 對於將要插入的第j個元素,與已經排序好的0 j 1個元素從j 1...

插入排序C 實現

演算法描述 從陣列第二個元素開始向後掃瞄,將每個元素插到它前面所有元素的合適位置。下面給出整數陣列的實現,對於其他複雜型別只需實現相應的自定義比較函式即可 include include using namespace std const int num 20 void exch int s,int...