排序演算法——插入排序
插入排序就是每一步都將一個待排資料按其大小插入到已經排序的資料中的適當位置,直到全部插入完畢。
注意是已經排序的資料中的適當位置。
也就是說,每一步的插入都是往已經排好序的子陣列中插入新的值。該演算法的時間複雜度也是O(n^2),精確的說是O(n(n-1))
下面是我寫的一個程式:
void insertSort(int* a,int n){
for(int i=1;i<n;i++){
int cntval = a[i];
int j=i;
for(;j>0;j--){
if(a[j-1]>cntval)
a[j] = a[j-1];
else
break;//檢測到插入位置便跳出來
}
a[j] = cntval;
}
}
下面我們來看一下教科書上寫的更標準的程式:
void insertSort(int* a,int n){
for(int i=1;i<n;i++){
int j=i;
int temp = a[i];
while(j>0&&temp<a[j-1]){
a[j]=a[j-1];j--;
}
a[j] = temp;
}
}
我們來分析一下演算法的時間複雜度:
最好情況下,即已有序的情況下,執行n-1趟,每一趟只比較一次,移動元素兩次,總的比較次數是n-1,移動元素次數是2(n-1),因此最好情況下時間複雜度是O(n);最壞情況下,每趟比較i次,移動元素i+2次,因此需要的比較次數和移動次數是N(N-1)/2,(N+4)(N-1)/2,為O(N^2).
我們可以看出,在內排序的簡單排序演算法中,除了最簡單的簡單選擇排序,插入排序和氣泡排序在最好情況下的時間複雜度都是O(N).這其實是很值得欣慰的一件事。
相關文章
- 排序演算法__折半插入排序排序演算法
- 【演算法】插入排序演算法排序
- PHP 排序演算法之插入排序PHP排序演算法
- 排序演算法之折半插入排序排序演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 排序演算法:插入排序演算法 PHP 版排序演算法PHP
- 常用演算法-插入排序演算法排序
- 排序演算法__直接插入排序排序演算法
- 排序演算法:直接插入排序排序演算法
- 排序演算法入門之「插入排序」排序演算法
- 排序演算法——直接插入排序排序演算法
- 排序演算法-直接插入排序排序演算法
- 實時插入排序演算法排序演算法
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 排序演算法(3)插入排序(Insertion Sort)排序演算法
- Java常見排序演算法之插入排序Java排序演算法
- 排序演算法之「插入排序(Insertion Sort)」排序演算法
- 排序演算法:二分插入排序排序演算法
- 排序演算法——二分插入排序排序演算法
- 畫江湖之演算法篇【排序演算法】插入排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 插入排序演算法排序
- #排序演算法#【2】直接插入排序、希爾排序排序演算法
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- python演算法 - 插入排序演算法Python演算法排序
- 插入排序排序排序
- 排序演算法之——二分插入排序演算法排序演算法
- 【排序演算法動畫解】直接插入排序排序演算法動畫
- 三言兩語講排序演算法——插入排序排序演算法
- PHP 演算法02之插入排序PHP演算法排序
- 直接插入排序演算法排序演算法
- 從演算法開始[插入排序]演算法排序
- 小白懂演算法之插入排序演算法排序
- 從演算法開始(插入排序)演算法排序
- 死磕演算法之插入排序演算法排序
- [java]插入排序及折半插入排序Java排序
- 【一起學習排序演算法】4 插入排序排序演算法
- Java實現氣泡排序和插入排序演算法Java排序演算法
- 排序之插入排序排序