直接插入排序
基本思想:
假設待排序的數存放在陣列arr[1...n]中。初始時,arr[1]自成1個有序區,無序區為arr[2...n]。從i=2起直至i=n為止,依次將arr[i]插入當前的有序區arr[1..i-1]中,生成含n個記錄的有序區。
演算法複雜度:
對於具有n個記錄的檔案,要進行n-1次排序
各種狀態下的時間複雜度:
┌─────────┬─────┬──────┬──────┐
│ 初始檔案狀態 │ 正序 │ 反序 │無序(平均) │
├─────────┼─────┼──────┼──────┤
│ 第i趟的關鍵 │ 1 │ i+1 │ (i-2)/2 │
│ 字比較次數 │ │ │ │
├─────────┼─────┼──────┼──────┤
│總關鍵字比較次數 │ n-1 │(n+2)(n-1)/2│ ≈n
2/4 │
├─────────┼─────┼──────┼──────┤
│第i趟記錄移動次數 │ 0 │ i+2 │ (i-2)/2 │
├─────────┼─────┼──────┼──────┤
│總的記錄移動次數 │ 0 │(n-1)(n+4)/2│ ≈n
2/4 │
├─────────┼─────┼──────┼──────┤
│時間複雜度 │ 0(n) │ o(n
2 ) │ o(n
2) │
**:
void insertsort(int *arr,int num)
arr[j+1] = temp;}}
}
希爾排序基本思想先取乙個正整數d1
然後取d2
直至di=1,即所有記錄放進乙個組中排序為止
演算法複雜度
希爾排序是不穩定的,希爾排序的執行時間依賴於增量序列,
其平均時間複雜度為o(n^1.3).
**
void shell(int a,int n) //shell 排序
a[i+k]=t;
}if(k == 1) break ;
(k/2)%2 ==0 ? k=k/2+1 : k=k/2;}}
插入排序 直接插入排序 希爾排序
1.直接插入排序 兩個陣列,有序陣列和無序陣列。排序前 無序陣列裡面所有的值都是無序的,有序陣列沒有值 排序中 無序陣列中拿出乙個數,放到有序陣列當中,有序陣列拿到數,將其按照大小有序的插入到無序陣列中 排序後 無序陣列中沒有數,有序陣列中的數為有序的。假設有一組無序序列 r0,r1,rn 1。1 ...
插入排序 直接插入排序 希爾排序
一 直接插入排序 1.思想 直接排序法,可以分為兩個部分,一部分是有序的,一部分是無序的.從這個圖上,應該是能看清楚直接插入排序的思想了.將無序部分的第乙個與有序部分進行比較.從有序部分的後面向前面比較,然後不斷地挪動有序部分的資料的位置 static void insertsort listlis...
排序 插入排序(直接插入排序 希爾排序)
插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序 和希爾排序。直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r...