0003 : 算法——插入排序

485 阅读1分钟

算法

插入排序是一种从数组左侧开始依次对数据进行排序的算法。

排序过程中,左侧数据陆续归为,右侧留下的的就是未排序数据。

插入排序的思路就是从右侧的未排序区域内取一个数,然后将它插入到已排序区域的合适位置上。

时间复杂度

1+2+...+(n1)=O(n2)1+2+...+(n-1)=O(n^2)

在将数值插入到左侧已排序区域的时候使用的是从右到左依次比较的方法,使得在最坏情况(待排序数组从大到小排序)下,第k轮要做k-1的比较操作,所以时间复杂度为 O(n2)O(n^2)

其实这部分可以使用二分查找进行优化,减少操作数,二分查找时间复杂度为 O(logn)O(logn),所以,优化后的时间复杂度应为 log1+log2+...+log(n1)=O(logn!)log1+log2+...+log(n-1)=O(logn!)

js

const input = [4,2,15,2,5,6,21,67,2,3]
const sort = (arr) => {
    const result = [input[0]]
    for (let i = 1; i < arr.length; i++) {
        const now = arr[i]
        if (now >= result[result.length -1]) {
            result.push(now)
        } else if (now <= result[0]) {
            result.unshift(now)
        } else {
            for (let j = i-2; j >0; j--) {
                if (now >= result[j]) {
                    result.splice(j+1,0,now)
                    j=0
                }
            }
        }
        
        
    }
    return result
}
console.log(sort(input))