插入排序

286 阅读2分钟

插入排序是一种最简单的排序算法。它通过构建有序序列,对未排序的序列,在已排序的序列中依次对比直到找到合适的位置并插入

java实现

        Integer[] arr = new Integer[]{43, 77, 29, 39, 66, 83, 104, 93, 11, 10, 18, 27};

        for (int i = 1; i < arr.length; i++) {
            // 将第0个元素认定是排好序的,从第1个元素开始到最后的元素认定是未排序的

            int temp = arr[i];// 记录要插入的元素

            // 从已排序的序列右边开始对比
            int j = i;
            while (j > 0 && temp < arr[j - 1]) {
                // 将要插入的值temp,依次和排好序的值作对比
                // 存在比要插入的值temp大的值时,将该大值后移,重复对比后移,直到找到比要插入到值小的值(没有较小值时,遍历到第0个元素)
                // 这个比要插入的值temp小的值后边的位置就是要插入的位置(没有较小值,位置就是0),如:比较小的值得位置时j-1,插入的位置就是j
                arr[j] = arr[j - 1];
                j--;
            }

            if (j != i) {
                // 和排好序的序列对比时,如果存在比要插入的值temp大的值,必定发生移位,且j!=i,则需要将要插入的值插入到合适的位置j
                arr[j] = temp;
            }
        }

        for (Integer integer : arr) {
            System.out.println(integer + "");
        }

输出结果: 10 11 18 27 29 39 43 66 77 83 93 104

算法步骤

  1. 认定第一个元素是已经排好序的序列,第二个元素就是待插入的元素。即外循环条件逻辑
  2. 将待插入的元素依次和有序序列对比,如果比待插入元素大就向后移,如果比待插入元素小就结束对比,较小值的后边就是待插入的位置。即内循环逻辑
  3. 将待插入的元素插入到对应的位置。即外循环逻辑
  4. 重复执行步骤2、3,直到最后一个元素。即外循环次数