插入排序的總結

插入排序的思想:
手里有一張牌,然后遍歷去摸剩下的牌

假如要排序的數(shù)組{34,8,64,51,32,21}

那么我們就先將第一個數(shù)34摸到手里

for(int i = 1;i<length;i++){
此時手里已經(jīng)有一張牌 a[0]=34
所以此時記錄下接下來要摸的手牌

   int temp = a[i]=8;此時a[1]=8

   接下來看8要插入到哪個位置

   j應該從當時要插入的數(shù)據(jù)的索引開始 也就是開始
   for (int j=i;temp<a[j-1]&&j>0 ;j-- ) {

      此時temp=a[1] j=i=1 那么就是說要插入的數(shù)據(jù)前邊只有一個數(shù)據(jù) 就是a[j-1]=a[0]=34 
      因為temp<a[0] 所以要摸的牌要插入到手里的牌的前邊  所以將前邊的牌往后移動一位
      a[j]=a[j-1];
      此時的場景就是a[1]=a[0]=34 將手里的牌往后移動一位 為要插入的牌留下空位
   }
   然后呢 新牌落位
   a[j]=temp;//此時j=0 所以temp落到首位

}

我們來看當我們摸第三張牌的時候
此時i=2 那么temp=64
然后我們進入內(nèi)循環(huán)

 此時j=2 從索引2處開始比較 
    temp=64  a[j-1]=a[1]=34 因為temp>a[j-1] 所以不用交換 不滿足條件語句 所以跳出循環(huán)

    a[j]=a[2]=temp 
    此時數(shù)組比較完之后的順序是{8,34,64,51,32,21}

此時摸到第四張牌
此時i=3 那么temp=a[3]=51
進入內(nèi)循環(huán)
j=3 此時temp=51 a[j-1]=a[2]=64 temp<a[j-1] 所以將前邊的牌往后移動一位
a[3]=a[j-1]=a[2]=64

   然后此時j-- =2 
     此時temp=51 a【j-1】=a[1]=34 temp >a[1] 所以不滿足循環(huán)條件 跳出循環(huán) 此時temp落位

     a[2]=temp =51

     此時數(shù)組比較完之后的順序是{8,34,51,64,32,21}

此時摸到第五張牌 32
此時i=4 temp =32

   進入內(nèi)循環(huán)
   j=i=4  temp=32  a[4-1]=a[3]=64  32<64 所以64往后移動一位
      a[4]=a[3]=64 j--=3

   j=3  a[3-1]=a[2]=51  temp <51 所以此時51往后移動一位
       a[3]=a[2]=51  j--=2
   j=2  a[2-1]=a[1]=34  temp=32 <34 所以繼續(xù)往后移動
        a[2]=a[1]=34

        此時數(shù)組的樣子應該是這樣子{8,  ,34,51,64,21}
        然后j--=1
   j=1  a[1-1]=a[0]=8 temp>8所以跳出循環(huán)

   那么temp就落到索引位置為1的位置
        此時數(shù)組的樣子應該是這樣子{8,  32,34,51,64,21}

此時摸到第六張牌 21 那么21應該落到的位置應該是32前面 所以應該是1的位置其他的都往后移動一位
此時數(shù)組的樣子應該是這樣子{8, 21, 32,34,51,64}

所以最后就是通過插入排序排好的樣子 
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容