插入排序的思想:
手里有一张牌,然后遍历去摸剩下的牌
假如要排序的数组{34,8,64,51,32,21}
那么我们就先将第一个数34摸到手里
for(int i = 1;i<length;i++){
此时手里已经有一张牌 a[0]=34
所以此时记录下接下来要摸的手牌
int temp = a[i]=8;此时a[1]=8
接下来看8要插入到哪个位置
j应该从当时要插入的数据的索引开始 也就是开始
for (int j=i;temp<a[j-1]&&j>0 ;j-- ) {
此时temp=a[1] j=i=1 那么就是说要插入的数据前边只有一个数据 就是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
然后我们进入内循环
此时j=2 从索引2处开始比较
temp=64 a[j-1]=a[1]=34 因为temp>a[j-1] 所以不用交换 不满足条件语句 所以跳出循环
a[j]=a[2]=temp
此时数组比较完之后的顺序是{8,34,64,51,32,21}
此时摸到第四张牌
此时i=3 那么temp=a[3]=51
进入内循环
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] 所以不满足循环条件 跳出循环 此时temp落位
a[2]=temp =51
此时数组比较完之后的顺序是{8,34,51,64,32,21}
此时摸到第五张牌 32
此时i=4 temp =32
进入内循环
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 所以继续往后移动
a[2]=a[1]=34
此时数组的样子应该是这样子{8, ,34,51,64,21}
然后j--=1
j=1 a[1-1]=a[0]=8 temp>8所以跳出循环
那么temp就落到索引位置为1的位置
此时数组的样子应该是这样子{8, 32,34,51,64,21}
此时摸到第六张牌 21 那么21应该落到的位置应该是32前面 所以应该是1的位置其他的都往后移动一位
此时数组的样子应该是这样子{8, 21, 32,34,51,64}
所以最后就是通过插入排序排好的样子