一、直接插入排序
思想: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 的複雜度。最差複雜度 當輸入陣列為倒序時,複雜度...