目的
面试需要, 后续面试复习可能后使用, 做一个个人的学习记录
学习资料来源
B站一个老师讲的面试相关视频
核心原理
- 将数组分为两个区域, 排序区域和未排序区域, 每一轮从未排序区域取出第一个元素, 插入到排序区(需要保证顺序)
- 重复以上步骤, 直到整个数组有序
代码实现
// 插入排序
private static void insertSortSolution(int[] arr) {
// i 代表带插入元素的索引
for (int i = 1; i < arr.length; i++) {
// 代表待插入的元素值, 这里放到临时变量temp, 方便后面元素移动
int temp = arr[i];
// 代表已排序区域的元素索引
int j = i - 1;
while (j >= 0) {
if (temp < arr[j]) {
// 元素的移动
arr[j + 1] = arr[j];
} else {
break;
}
j--;
}
arr[j + 1] = temp;
}
}
与选择排序比较
- 二者平均时间复杂度都是O(n^2)
- 大部分情况下, 插入排序都略优于选择排序
- 有序集合插入的时间复杂度为O(n)