算法排序篇-3【插入排序】js解法

50 阅读1分钟

插入排序

基本思路

插入排序每次往数组里加一项,最后构建成排好序的数组。假设数组里已经有了一项,接着要插入的第二项与第一项进行比较,是插入到第一项的前面还是第一项的后面,接着要插入的第三项与前面的项比较是该插入到那个具体位置,以此类推。

解法

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)

性能

排序小型数组时,插入排序比冒泡排序和选择排序性能要好。