直接插入排序

每一步将一个待排序的记录,插入到一个已排好序的有序序列中,直到插完所有元素为止

   

假设有一个无序序列 L0L1L2Ln-1

  • 先将序列中下标为 0 的元素L0 视为元素个数为 1 的有序序列
  • 接着,依次将 L1L2Ln-1 插入到这个有序序列中;这里就需要一个外部循环,用来获取下标 1 n-1 的元素
  • 插入过程,假设将 Li 插入到这个有序序列中,当插入 Li 时,前 i - 1 个元素肯定是有序的了
  • 所以,就需要将 Li 和之前 L0 ~ Li-1 的进行比较,确定需要插入的位置;
  • 这里需要一个内部循环,一般都是从后往前对比,即从下标 i-1 开始向 0 进行扫描对比
import java.util.Arrays;
/**
 * @date 2020/8/20 11:04
 */
public class TestSort {

    public static void main(String[] args) {
	       // 待排序数组 
        int[] arr = {8, 2, 4, 12, 4, 10, 3, 11, 1};
        System.out.println(Arrays.toString(arr));
	       // 排好序数组
        int[] sort = insertSort(arr);
        System.out.println(Arrays.toString(sort));
    }

    private static int[] insertSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int j = i - 1;
            int temp = arr[i];
            while(j >= 0 && arr[j] > temp) {
                arr[j + 1] = arr[j];
	                     j--;
            }
            arr[j + 1] = temp;
        }
        return arr;
    }
}

原文地址:https://www.cnblogs.com/sebastian-tyd/p/13580171.html