算法-基础(四) 八大排序 - 插入排序

先以一组数据 的渐变形式来了解一下
这是数据的最初格式

《算法-基础(四) 八大排序 - 插入排序》

第一次
    判断 [0]>[1] 的情况下 这时候元素交换一下

《算法-基础(四) 八大排序 - 插入排序》

第二次

    判断 [1]>[2] 的情况下 这时候元素交换一下 

《算法-基础(四) 八大排序 - 插入排序》

《算法-基础(四) 八大排序 - 插入排序》

然后在判断
    [0]>[1] 的情况下 就再次进行交换如果不是则不进行元素交换

《算法-基础(四) 八大排序 - 插入排序》

第三次
    判断[2]>[3] 情况下进行进行交换 图中明细 [2]<[3] 所以无需交换元素

《算法-基础(四) 八大排序 - 插入排序》

第四次

    判断[3]>[4] 情况下进行进行交换 图中明细 [3]<[4] 所以无需交换元素

《算法-基础(四) 八大排序 - 插入排序》

第五次

      判断[4]>[5] 情况下进行进行元素交换 

   5.1

《算法-基础(四) 八大排序 - 插入排序》

    5.2

《算法-基础(四) 八大排序 - 插入排序》

    5.3
    由于 [4]>[5] 进行了元素交换,现在就得继续往前面一直比较判断 
    判断 [3]>[4] 如果结果为真就交换元素  
《算法-基础(四) 八大排序 - 插入排序》
《算法-基础(四) 八大排序 - 插入排序》

5.4

    由于 [3]>[4] 进行了元素交换,现在就得继续往前面一直比较判断 

    判断 [2]>[3] 如果结果为真就交换元素  

《算法-基础(四) 八大排序 - 插入排序》

《算法-基础(四) 八大排序 - 插入排序》

上面的插入排序的基本概念基本规律已经通过一步一步的走一遍,不理解的多理解几遍,如果还是看不懂的话改行吧,你们自己依次类推就能推出结下面代码和规律的推导实现。

判断推理过程

1.[0]>[1]     为真-交换元素
2.[1]>[2]     为真-交换元素

    2.1.[0]>[1]    为假-不交换元素
3.[2]>[3]      为假-不交换元素

4.[3]>[4]      为假-不交换元素

5.[4]>[5]      为真-交换元素
      5.1.[3]>[4]   为真-交换元素
      5.2.[2]>[3]   为真-交换元素
      5.3.[1]>[2]   为真-交换元素
      5.4.[0]>[1]   为真-交换元素

上面是进行步骤的流程找一下规律就可以写出代码

代码实现

  public void px(int[] arr) {
 2         int tmp;
 3         for(int i = 1; i < arr.length; i++) {
 4             // 待插入数据
 5             tmp = arr[i];
 6             int j;
 7             for(j = i - 1; j >= 0; j--) {
 8                 // 判断是否大于tmp,大于则后移一位
 9                 if(arr[j] > tmp) {
10                     arr[j+1] = arr[j];
11                 }else{
12                     break;
13                 }
14             }
15             arr[j+1] = tmp;
16             System.out.println(i + ":" + Arrays.toString(arr));
17         }
18     }

强调看图理解会快 在自己找一下规律别一上来就看我代码

有问题请发邮件[email protected]  毕竟我这人比较粗心

点赞