資訊學奧賽系列教程:插入排序
阿新 • • 發佈:2018-11-30
插入排序:
有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數,但要求插入後此資料序列仍然有序。插入排序類似於打撲克時摸排的情形,每次將摸到的牌按花色和大小插入適當的位置,如下圖所示:
插入排序基本思想:
每步將一個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。排序過程如下圖所示
插入排序的程式碼實現:
#include <iostream> using namespace std; const int N=10; int a[N]; void addsort(int val,int index) //插入並排序 { if (index ==1) //第一個元素直接插入 { a[0] =val; return; } if (index ==2) //第二個元素和前一個比較 { if (a[0]>val) { a[1] = a[0]; a[0] = val; } else { a[1] =val; } return; } for (int i=0;i<index;i++) { if (a[i]>val) { for (int j=index-1;j>=i;j--) //將後面的元素都往後移一位 { a[j] =a[j-1]; } a[i] = val; break; } a[index-1] =val; } } int main() { int m,n; cout<<"請輸入排序個數:"<<endl; cin>>m; for (int i=1;i<=m;i++) { cout<<"請輸入第"<<i<<"個數:"<<endl; cin>>n; addsort(n,i); //邊插入邊排序 } for (int i=0;i<m;i++) { cout<<a[i]<<endl; } return 0; }
插入排序的時間複雜度:
插入排序時需要比較待插入元素的大小,選擇合適的位置,並且將後面的元素進行移動,時間複雜度為O(n2).
插入排序的穩定性:
插入排序是一種穩定的排序