C 實現插入排序 直接 折半插入,希爾排序

2021-10-05 10:41:25 字數 1089 閱讀 7946

時間複雜度和穩定性都在**塊裡

直接插入排序的實現:

#include

using

namespace std;

//直接插入排序 最好時間複雜度為o(n)

//平均和最壞都是o(n^2),不穩定 適用於順序儲存和鏈式儲存

intmain()

//輸出陣列元素

for(i =

0; i < n; i++

) cout << p[i]

<<

" ";

cout << endl;

system

("pause");

return0;

}

折半插入排序:

#include

using

namespace std;

//折半插入 穩定演算法 只適用於順序儲存

intmain()

for(j = i -

1; j >= high +

1; j--

) p[j +1]

= p[j]

;//low也可以實現排序,觀察上的移動的最後乙個元素位置

//p[j + 1] = temp;

p[high+1]

= temp;

}//輸出陣列元素

for(i =

0; i < n; i++

) cout << p[i]

<<

" ";

cout << endl;

system

("pause");

return0;

}

希爾排序:

#include

using

namespace std;

//希爾排序 平均時間複雜度為o(n^1.3)

//不穩定 適用於順序儲存

void

shellsort

(int

*a,int len)

}int

main()

插入排序 直接插入, 折半插入,希爾插入

插入類排序 最簡單粗暴的直接插入排序 void direct insert sort int n return 優點 一旦前面排好了之後後面的插入非常的快。稍微高大上一點的折半插入排序 但是再移動的過程中把時間複雜都給彌補上了 時間複雜度依舊挺高的 折半插入排序 void bi insert sor...

插入排序 折半插入排序 希爾排序

1 排序演算法的穩定性 穩定的 關鍵字相同的元素在排序後相對位置不變 不穩定的 關鍵字相同的元素在排序後相對位置改變 2 排序演算法分類 內部排序,外部排序。1 演算法思想 每次將乙個待排序的記錄按其關鍵字大小插入到前面已排好序的子串行中,直到全部記錄插入完成。2 直接插入排序 帶哨兵的直接插入排序...

插入排序(直接插入排序 折半插入排序和希爾排序)

所謂插入排序就是將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中,直到全部記錄插入完成。1.直接插入排序 假設在排序過程中,待排序表l 1 n 在某次排序過程中的某一時刻狀態如下 為了實現將元素l i 插入到已有序列的子串行l 1 i 1 中,需要執行以下操作 1 查詢l i 在l ...