插入排序 (Insertion Sort),依次遍历所有元素,并将元素按升序或降序插入前面已经排序的元素中。
insertion-sort/index.js
function sort(arr = []) {
const a = [...arr];
for (let i = 1; i < a.length; i += 1) {
for (let j = i; j > 0 && a[j] < a[j - 1]; j -= 1) {
[a[j], a[j - 1]] = [a[j - 1], a[j]];
}
}
return a;
}
名称 | En | 最优 | 平均 | 最坏 | 内存 | 稳定 |
---|---|---|---|---|---|---|
插入排序 | Insertion sort | n | n^2 | n^2 | 1 | Yes |
设 C 表示比较次数,M 表示移动次数。最好情况:
时间复杂度为
最坏情况 :
时间复杂度为
平均时间复杂度为
O(1)
对于相同的元素,后面的元素不会插入到前面的元素前面,所以,插入排序是稳定排序。