# 插入排序
取出从无序序列中的第一个元素,有序片段的规模加 1,在有序片段中找到该元素合适的插入位置进行插入,无序片段的规模减 1,下次又从无序片段的第一个元素开始排序,重复这个操作直到无序片段长度为 0, 则完成排序。
# 排序过程
# 算法实现
/**
* 对数组进行插入排序
* @param {Array<number>} arr 需要进行排序的数组
*/
function insertionSort(arr) {
// 默认认为第一个元素已经有序
for (let i = 1; i < arr.length; i++) {
let j = i;
let cur = arr[i];
//向前找合适的插入位置,退出条件有两种可能,1、找到了合适的插入位置;2、找到了头了
while (j > 0 && arr[j - 1] > cur) {
// 在每次查找插入位置的时候,都将当前元素向后挪一位。
arr[j] = arr[j - 1];
j--;
}
arr[j] = cur;
}
}
# 复杂度与稳定性
插入排序的时间复杂度是O(n²)
,是稳定
的排序算法。