每一步将一个待排序的记录,插入到一个已排好序的有序序列中,直到插完所有元素为止
假设有一个无序序列 L0、L1、L2、…、Ln-1
- 先将序列中下标为 0 的元素L0 视为元素个数为 1 的有序序列
- 接着,依次将 L1、L2、…、Ln-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; } }