每一步将一个待排序的记录,插入到一个已排好序的有序序列中,直到插完所有元素为止
假设有一个无序序列 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;
}
}
