Open
Description
简介
排序算法 | 时间复杂度 | 是否基于比较 |
---|---|---|
冒泡、插入、选择 | O(n²) | √ |
快排、归并 | O(nlogn) | √ |
桶、计数、基数 | O(n) | × |
插入排序,每次将数据分为已排序和未排序区间,默认第一个元素为已排序,然后每次从未排序区间里取一个元素,通过比较,插入到已排序区间里,重复这个过程,直到未排序区间元素为空。
代码
function insertSort(arr) {
const n = arr.length
if (n <= 1) return
for (let i = 1; i < n; i++) {
let value = arr[i]
let j = i - 1
for (; j >= 0; j--) {
if (arr[j] > value) {
arr[j + 1] = arr[j] // 把数据往后搬,腾出位置
} else {
break
}
}
arr[j+1] = value
}
}
const arr = [4, 5, 6, 1, 2, 3]
insertSort(arr) // [1, 2, 3, 4, 5, 6]
动画演示
总结
- 时间复杂度是 O(n²), 空间复杂度是 O(1),排序过程是稳定的。
- 最好时间复杂度是 O(n), 最坏时间复杂度是 O(n²)