插入排序的思想:
手里有一張牌逮矛,然后遍歷去摸剩下的牌
假如要排序的數(shù)組{34窑滞,8,64电爹,51蔫仙,32,21}
那么我們就先將第一個(gè)數(shù)34摸到手里
for(int i = 1;i<length;i++){
此時(shí)手里已經(jīng)有一張牌 a[0]=34
所以此時(shí)記錄下接下來(lái)要摸的手牌
int temp = a[i]=8;此時(shí)a[1]=8
接下來(lái)看8要插入到哪個(gè)位置
j應(yīng)該從當(dāng)時(shí)要插入的數(shù)據(jù)的索引開(kāi)始 也就是開(kāi)始
for (int j=i;temp<a[j-1]&&j>0 ;j-- ) {
此時(shí)temp=a[1] j=i=1 那么就是說(shuō)要插入的數(shù)據(jù)前邊只有一個(gè)數(shù)據(jù) 就是a[j-1]=a[0]=34
因?yàn)閠emp<a[0] 所以要摸的牌要插入到手里的牌的前邊 所以將前邊的牌往后移動(dòng)一位
a[j]=a[j-1];
此時(shí)的場(chǎng)景就是a[1]=a[0]=34 將手里的牌往后移動(dòng)一位 為要插入的牌留下空位
}
然后呢 新牌落位
a[j]=temp;//此時(shí)j=0 所以temp落到首位
}
我們來(lái)看當(dāng)我們摸第三張牌的時(shí)候
此時(shí)i=2 那么temp=64
然后我們進(jìn)入內(nèi)循環(huán)
此時(shí)j=2 從索引2處開(kāi)始比較
temp=64 a[j-1]=a[1]=34 因?yàn)閠emp>a[j-1] 所以不用交換 不滿足條件語(yǔ)句 所以跳出循環(huán)
a[j]=a[2]=temp
此時(shí)數(shù)組比較完之后的順序是{8丐箩,34摇邦,64,51雏蛮,32涎嚼,21}
此時(shí)摸到第四張牌
此時(shí)i=3 那么temp=a[3]=51
進(jìn)入內(nèi)循環(huán)
j=3 此時(shí)temp=51 a[j-1]=a[2]=64 temp<a[j-1] 所以將前邊的牌往后移動(dòng)一位
a[3]=a[j-1]=a[2]=64
然后此時(shí)j-- =2
此時(shí)temp=51 a【j-1】=a[1]=34 temp >a[1] 所以不滿足循環(huán)條件 跳出循環(huán) 此時(shí)temp落位
a[2]=temp =51
此時(shí)數(shù)組比較完之后的順序是{8,34挑秉,51法梯,64,32犀概,21}
此時(shí)摸到第五張牌 32
此時(shí)i=4 temp =32
進(jìn)入內(nèi)循環(huán)
j=i=4 temp=32 a[4-1]=a[3]=64 32<64 所以64往后移動(dòng)一位
a[4]=a[3]=64 j--=3
j=3 a[3-1]=a[2]=51 temp <51 所以此時(shí)51往后移動(dòng)一位
a[3]=a[2]=51 j--=2
j=2 a[2-1]=a[1]=34 temp=32 <34 所以繼續(xù)往后移動(dòng)
a[2]=a[1]=34
此時(shí)數(shù)組的樣子應(yīng)該是這樣子{8, ,34立哑,51,64姻灶,21}
然后j--=1
j=1 a[1-1]=a[0]=8 temp>8所以跳出循環(huán)
那么temp就落到索引位置為1的位置
此時(shí)數(shù)組的樣子應(yīng)該是這樣子{8, 32,34铛绰,51,64产喉,21}
此時(shí)摸到第六張牌 21 那么21應(yīng)該落到的位置應(yīng)該是32前面 所以應(yīng)該是1的位置其他的都往后移動(dòng)一位
此時(shí)數(shù)組的樣子應(yīng)該是這樣子{8, 21捂掰, 32,34敢会,51,64}
所以最后就是通過(guò)插入排序排好的樣子