插入排序的思想:
手里有一張牌,然后遍歷去摸剩下的牌
假如要排序的數(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}
所以最后就是通過插入排序排好的樣子