直接插入排序與希爾排序的思想及演算法實現

2021-08-09 05:01:01 字數 1037 閱讀 9800

一、直接插入排序

思想:1)把乙個陣列分為已排序和未排序的兩個部分  

2)從未排序的部分取出乙個資料,把這個資料暫時存放在臨時量中  

3)從已排序的部分找到待排序資料的合適位置  

4)直接插入該資料

注意:若是資料量非常大的陣列排序,則所需移動的次數非常多,效率低下。所以,直接插入排序適用於資料量小,較為有序的陣列。

穩定性:穩定

時間複雜度:o(n^2) 空間複雜度:o(1)

****實現**

#include#include#includevoid insertsort(int arr,int len)

arr[j+1] = tmp;

}}int main()//測試用例

; int len = sizeof(arr)/sizeof(arr[0]);

insertsort(arr, len);

for(int i = 0;i}

二、希爾排序

思想:把乙個陣列按照增量劃分為不同的資料組,對於每乙個資料組進行組內排序,通過增量的減小使整個資料組有序

增量的選擇規律:1)選擇素數 2)最後乙個增量必須為1

穩定性:不穩定

時間複雜度:不定空間複雜度:o(1)

****實現** 

// 希爾排序

void shell(int arr,int len,int dk)//dk:增量

arr[j+dk] = tmp;

}}void shellsort(int arr,int arr_len,int dka,int dka_len)

}int main()//測試用例

; int len = sizeof(arr)/sizeof(arr[0]);

int dka = ;

int dka_len = sizeof(dka)/sizeof(dka[0]);

shellsort(arr, len, dka,dka_len);

for(int i = 0;i

直接插入排序與希爾排序

package basicknowledge.sort program summary author peicc create 2019 07 18 16 46 07 插入排序 將未排序的資料插入到已排序的資料系列之中 時間複雜度o n2 1 2 3 n 1 最優 o n 陣列有序,每次只需比較不成...

插入排序 直接插入排序與希爾排序

插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r ...

直接插入排序 希爾排序

一.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。最優複雜度 當輸入陣列就是排好序的時候,複雜度為o n 而快速排序在這種情況下會產生o n 2 的複雜度。最差複雜度 當輸入陣列為倒序時,複雜度...