是一種簡單直觀的排序算法。它的工做原理是經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,一般採用in-place排序(即只需用到O(1)的額外空間的排序),於是在從後向前掃描過程當中,須要反覆把已排序元素逐步向後挪位,爲最新元素提供插入空間。ios
通常來講,插入排序都採用in-place在數組上實現。具體算法描述以下:算法
示例代碼數組
#include<iostream> using namespace std; int data[8]={6,5,3,1,8,7,2,4}; int myInsertSort(int ds[],int length){ //從第二個元素開始掃描 for(int i=1;i<length;i++){ //若是當前元素大於已排序元素,跳出循環,從下一元素開始執行 if(ds[i]>ds[i-1]) continue; //保存當前元素,將已排序的最後一個元素後移(已比較過) int temp=ds[i]; ds[i]=ds[i-1]; //從已排序的倒數第二個元素開始(若是有的話) int j=i-2; for(;j>=0;j--) //若是當前元素大於要插入元素,當前元素向後移,不然跳出 if(ds[j]>temp) ds[j+1]=ds[j]; else break; //插入待排序元素 ds[j+1]=temp; } return 0; } int main(){ myInsertSort(data,8); for(int i=0;i<8;i++) cout<<data[i]<<endl; getchar(); return 0; }