1. 程式人生 > >排序(六)插入排序

排序(六)插入排序

需要 一次循環 算法 font 空間 n) span margin 循環

參考文章:

算法描述:

對於給定的一個數組,初始時假設第一個記錄自成一個有序序列,其余記錄為無序序列。接著從第二個記錄開始,按照記錄的大小依次將當前處理的記錄插入到其之前的有序序列中,直至最後一個記錄插入到有序序列中為止

技術分享圖片

代碼實現:

    public void insertSort(int a[]){  
            int length=a.length; //數組長度  
            int j;               //當前值的位置  
            int i;               //指向j前的位置  
            int
key; //當前要進行插入排序的值 //從數組的第二個位置開始遍歷值 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) 用於記錄需要插入的數據
  • 穩定性:穩定

排序(六)插入排序