1. 程式人生 > 其它 >排序_插入排序_希爾排序

排序_插入排序_希爾排序

直接插入排序演算法(參考本人博文https://www.cnblogs.com/KeithTee/p/15186334.html)的時間複雜度為O(n²),但是,如果待排序列為“正序”時,時間複雜度可以提高到O(n),由此可見,它更適用於基本有序的排列表和資料量不大的排列表。

希爾排序是基於上述兩點對直接插入排序改進而來。又稱縮小增量排序。

 1 void ShellSort(ElemType A[] , int n){
 2     //A[0]是暫存單元,不是哨兵,當j <= 0時,插入位置已到
 3     
 4     for (dk = n/2 ; dk >= 1 ;dk /= 2)        //
步長變化 5 for(i = dk + 1 ; i <= n ; ++ i) 6 if(A[i] < A[i -dk] ){ //需將A[i]插入有序增量子表 7 A[0] = A [i]; //暫存在A[0] 8 for( j = j -dk ; j>= && A[0]< A [j] ; j -= dk) 9 A[j + dk] = A [j]; //記錄後移,查詢插入的位置 10 A[j + dk] = A[0
]; //插入 11 } 12 }

空間效率:同直接插入演算法,O(1)。

時間效率:最壞的情況下O(n²)。

穩定性:不穩定。(當相同關鍵字的記錄被劃分到不同的子表時,可能會改變他們之間的相對次序)

適用性:僅適用於線性表為順序儲存的情況。