插入排序详解

插入排序详解

思路分析

  1. 插入排序即 将要插入的数寻找合适的位置插入
  2. 将一个要插入的数组分成两部分,一个有序表和一个无序表,然后将无序表中的每一个数插入到有序表中
  3. 在插入过程中,先寻找要插入的位置,然后插入
  4. 刚开始有序表可以认为是数组的第一个元素,无序表可以认为是数组中剩下的元素,然后依次插入,有序表边长,无序表变短
  5. 寻找插入的位置,从右至左依次扫描有序表中的元素并和要插入的元素作比较,如果要插入的元素较小,则右移当前有序表中的当前元素,直到要插入到元素大于当前有序表中的元素为止
  6. 找到位置后插入即可
  7. 源码及分析见下

源码及分析

/**
     * 插入排序
     * @param arr 要进行排序的数组
     */
    public static void insertSort(int[] arr){
        for (int i = 1; i < arr.length; i++) {
            //定义变量insertValue保存要插入的值
            int insertValue = arr[i];
            //定义变量insertIndex保存要插入的数的位置索引
            int insertIndex = i - 1;
            //使用while循环寻找要插入的位置
            //insertIndex >= 0 保证数组不越界
            //如果要插入的数小于左边的数,则将左边的数向右移动,直到不小于为止,也就找到了待插入的位置
            while (insertIndex >= 0 && insertValue < arr[insertIndex]){
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex --;
            }
            //循环结束后则找到要插入的位置
            //判断要插入的元素位置是否发生变化
            if (insertIndex + 1 != i) {
                arr[insertIndex + 1] = insertValue;
            }
        }
    }
posted @ 2021-05-31 16:38  mx_info  阅读(200)  评论(0)    收藏  举报