插入算法 轉載

 插入排序算法是一個對少許元素進行排序的有效算法。插入排序的工做原理與打牌時整理手中的牌的作法相似,開始摸牌時,咱們的左手是空的,接着一次從桌上摸起一張牌,並將它插入到左手的正確位置。爲了找到這張牌的正確位置,要將它與手中已有的牌從右到左進行比較,不管何時手中的牌都是排序好的。算法

    JAVA實現該算法以下:數組

 1 public void insertSort(int a[]){  
 2         int length=a.length; //數組長度  
 3         int j;               //當前值的位置  
 4         int i;               //指向j前的位置  
 5         int key;             //當前要進行插入排序的值  
 6         //從數組的第二個位置開始遍歷值  
 7         for(j=1;j<length;j++){  
 8             key=a[j];  
 9             i=j-1;  
10             //a[i]比當前值大時,a[i]後移一位,空出i的位置,好讓下一次循環的值後移  
11             while(i>=0 && a[i]>key){  
12                 a[i+1]=a[i]; //將a[i]值後移  
13                 i--;         //i前移  
14             }//跳出循環(找到要插入的中間位置或已遍歷到0下標)  
15             a[i+1]=key;    //將當前值插入  
16         }  
17     }  

 

insertSort在數組A={5,2,4,6,1,3}上的處理過程,數組的下標出如今巨型的上方,黑色框的值即爲key=a[j]。spa

a[i]即爲a[j]左邊的值,每次循環key與a[i]進行比較,若是key<a[i],則a[i]移到 i+1處,同時i--向左移動,直到找到a[i]<=key或者i<0,此時將 key插入到a[i+1]處。code

        問題1:a[i]第一次進行右移時覆蓋了a[i+1]值,是否形成了數據丟失?blog

答:不會形成數據丟失,應爲第一次右移前的i+1=j,此時a[j]的值存在了key裏了。每次右移都爲下一次右移或插入留出了位置,這就是插入排序的關鍵點所在。排序

相關文章
相關標籤/搜索