13、数据结构与算法 - 基础:排序算法之插入排序

1、插入排序介绍

插入排序属于内部排序法,一般也被称为直接插入排序,对于少量元素排序来说是一个有效的算法。它是对要排序的元素以插入的方式找到元素的适当位置,达到排序的目的

2、插入排序思想:

把n个要排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含 n - 1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使它成为新的有序表

在待排序的元素中,假设前面 n - 1(其中 n >= 2)个数是排好序的

3、插入排序代码实现

public static void insertSort(int[] arr) {
   
     
    for(int i = 1; i < arr.length; i++) {
   
     
        // 临时变量,用来存储要要插入的值
        int insertValue = arr[i];
        // 要插入值前一个位置的下标
        int insertIndex = i - 1;

        // 判断下标未越界还在找要插入位置,并且要插入的值是否小于 arr[insertIndex] 的值
        while (insertIndex >= 0 && insertValue < arr[insertIndex]) {
   
     
            // 将要插入位置的值赋值给后一个
            arr[insertIndex + 1] = arr[insertIndex];
            // 继续向前找,前面的是已经排序好的数据,直到找到合适位置或者 index 小于 0
            insertIndex --;
        }
        // 已经找到合适位置后将要插入的值 insertValue 赋值给 arr[insertIndex + 1]
        arr[insertIndex + 1] = insertValue;
    }
    System.out.println(Arrays.toString(arr));
}