插入類排序

2022-09-20 18:36:10 字數 1903 閱讀 2182

一、直接插入排序(straight insertion sort)

1.時間複雜度:o(n2)

2.空間複雜度:o(1)

3.實現:

1

void insertsort(int* a, int

num)

10 a[j + 1] = a[0];//

插入到正確位置11}

12}13 }

二、折半插入排序(binary insertion sort)

1.時間複雜度:o(n2)

2.空間複雜度:o(1)

3.實現:

1

void binaryinsertsort(int* a, int

num)

13else16}

17for (j = i - 1; j >= low; j--)

20 a[low] = a[0];//

插入正確位置21}

22}23 }

三、希爾排序(縮小增量排序)

1.時間複雜度:o(n1.5)

2.空間複雜度:o(1)

3.增量序列:應使增量序列中的值沒有除1之外的公因子,並且最後乙個增量值必須等於1

4.實現:

1

void shellinsert(int* a, int k, int

num)

9 a[j + k] = a[0];//

插入正確位置10}

11}12}

1314

void shellsort(int* a, int

num) ;//

增量序列

16for (i = 0; i < 4; i++)

19 }

四、源**

1

//在 microsoft visual studio community 2022 下通過測試

2#define _crt_secure_no_warnings

3 #include 4

5void insertsort(int* a, int

num)

14 a[j + 1] = a[0];//

插入到正確位置15}

16}17}

1819

void binaryinsertsort(int* a, int

num)

31else34}

35for (j = i - 1; j >= low; j--)

38 a[low] = a[0];//

插入正確位置39}

40}41}

4243

void shellinsert(int* a, int k, int

num)

51 a[j + k] = a[0];//

插入正確位置52}

53}54}

5556

void shellsort(int* a, int

num) ;//

增量序列

58for (i = 0; i < 4; i++) 61}

6263

int main(void

) ;//

a[0]設定監視哨

66//

insertsort(a, 11);

67//

binaryinsertsort(a, 11);

68 shellsort(a, 11

);69

for (i = 1; i < 11; i++)

72return0;

73 }

源**

插入類排序

插入類排序基本思想 在乙個已經排好序的記錄子集的基礎上,每一步將下乙個待排序的記錄有序插入已排好序的子集中,直到將所有待排序記錄插入為止。1.直接插入排序 演算法思想 將第i個記錄插入到前面i 1個已經排好序的記錄中。假設待排序記錄存放在r 1.length 之中,為了提高效率附設乙個監視哨r 0 ...

排序之插入類排序

1.直接插入排序 思想 從無到有,陣列一直保持有序遞增,新來的元素p與數值r從末到首比較,若p小於陣列數值,則將陣列值後移,為p的插入預留空間 r從r 1 開始儲存,最壞情況下時間r中元素遞增,時間複雜度為o n 2 空間複雜度為o 1 void insertsort int r,int n els...

內部排序(1) 插入類排序

插入類排序 一 直接插入排序 演算法分析 從空間角度來看,只需要乙個輔助空間r 0 從時間角度來看,主要時間耗費在關鍵字比較和移動元素上。直接插入排序的時間複雜度為o n 2 空間複雜度為o 1 直接插入排序是穩定的。直接插入排序在基本有序時效率較高,並且在序列規模不是很大時效率也很高。void i...