插入排序的总结

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

假如要排序的数组{34,8,64,51,32,21}

那么我们就先将第一个数34摸到手里

for(int i = 1;i 此时手里已经有一张牌 a[0]=34
所以此时记录下接下来要摸的手牌

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

   接下来看8要插入到哪个位置

   j应该从当时要插入的数据的索引开始 也就是开始
   for (int j=i;temp0 ;j-- ) {

      此时temp=a[1] j=i=1 那么就是说要插入的数据前边只有一个数据 就是a[j-1]=a[0]=34 
      因为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[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}

所以最后就是通过插入排序排好的样子 

你可能感兴趣的:(插入排序的总结)