插入排序(直接插入排序 希爾排序)

2021-06-18 07:09:14 字數 1539 閱讀 5568

直接插入排序                      

基本思想:

假設待排序的數存放在陣列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...