插入排序
基本思路
插入排序每次往数组里加一项,最后构建成排好序的数组。假设数组里已经有了一项,接着要插入的第二项与第一项进行比较,是插入到第一项的前面还是第一项的后面,接着要插入的第三项与前面的项比较是该插入到那个具体位置,以此类推。
解法
let array = [3,7,5,9,2,4]
function insertionSort(array) {
const { length } = array
let temp // 存储要插入的值
for (let i = 1; i < length; i++) { // 默认数组有一项,从1开始
let j = i
temp = array[i] // 存储要插入的值
while(j > 0 && (array[j - 1] > temp)) { // 如果要插入的值的前一项比要插入的值大,则插入的前一项向后面移一位,而插入的值再与前面的值相比较,直到找到合适的位置(j),同时j索引减少到合适的位置
array[j] = array[j - 1]
j--
}
array[j] = temp // 找到合适的位置,插入要插入的值
}
return array
}
console.log(insertionSort(array));
复杂度
最好的情况,升序排列,时间复杂度为O(n) 最欢的情况,降序排列,时间复杂度为O(n^2)
性能
排序小型数组时,插入排序比冒泡排序和选择排序性能要好。