排序(六)插入排序
阿新 • • 發佈:2018-01-14
需要 一次循環 算法 font 空間 n) span margin 循環
參考文章:
算法描述:
對於給定的一個數組,初始時假設第一個記錄自成一個有序序列,其余記錄為無序序列。接著從第二個記錄開始,按照記錄的大小依次將當前處理的記錄插入到其之前的有序序列中,直至最後一個記錄插入到有序序列中為止
代碼實現:
public void insertSort(int a[]){ int length=a.length; //數組長度 int j; //當前值的位置 int i; //指向j前的位置 intkey; //當前要進行插入排序的值 //從數組的第二個位置開始遍歷值 for(j=1;j<length;j++){ key=a[j]; i=j-1; //a[i]比當前值大時,a[i]後移一位,空出i的位置,好讓下一次循環的值後移 while(i>=0 && a[i]>key){ a[i+1]=a[i]; //將a[i]值後移 i--; //i前移 }//跳出循環(找到要插入的中間位置或已遍歷到0下標) a[i+1]=key; //將當前值插入 } }
算法分析:
- 時間復雜度:O(n2) 最好O(n) 最壞O(n2)
- 空間復雜度:O(1) 用於記錄需要插入的數據
- 穩定性:穩定
排序(六)插入排序