概述
插入排序是将待插入元素插入到已有序部分中的过程,插入后仍然有序。假设有数组A的n个元素A[0] ~ A[n],令i从1到n枚举,进行n次操作。假设第i次操作时,A[0] A[i-1]已有序,而A[i]A[n]还未排序,那么从[0,i-1]中寻找某个位置j,使得将A[i]插入位置j后,范围[0,i]有序。此时A[j]A[i-1]会后移一位至A[j+1]A[i]。
代码实现
public static void sort(int[] nums) {
// 默认数组第一个数是有序的所以从数组第二个数开始
for (int i = 1; i < nums.length; i++) {
// 存放待比较的数和已排序好的子数组长度
int temp = nums[i],j = i;
// 子数组未遍历完且要插入的数小于子数组中的元素时
while (j > 0 && temp < nums[j - 1]) {
// 把nums[j - 1]的所有元素后移一位
nums[j] = nums[j - 1];
j--;
}
// 将待比较的数插入位置j
nums[j] = temp;
}
}