数据结构与算法之排序: 插入排序 (Javascript版)

排序

  • 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)

插入排序

  • 该排序属于 贪心 策略
  • 关注的是局部,是一种苟且的东西

算法实现

// 随机数组,插入排序
Array.prototype.insertionSort = function() {
    let len = this.length;
    for(let i=1; i<len; ++i) {
        let tmp = this[i]; // tmp记录当前开始处理的元素,就是你手中的当前要插入的牌
        let j = i; // j从i开始
        // while循环往前比
        while(j > 0) {
            if(this[j-1] > tmp) {
                this[j] = this[j-1] // 当前位置和前一个位置进行值交换
            } else {
                // 所有都有序
                break;
            }
            --j;
        }
        // while循环之后,记录j的位置,j最终会降落到一个不能再降的位置(不一定是0)使之当前整体有序 
        // j 也就是 tmp 变量值应该插入的位置
        // 交换开始位置,if 提高性能
        if(i!=j) {
            this[j] = tmp;
        }
    }
}

let arr = [5,4,3,2,1]
arr.insertionSort()
console.log(arr); // [1, 2, 3, 4, 5]
  • 在排序小型数组时,性能比选择排序和冒泡都要好,也是贪心算法
  • 思路
    • 从第二个数开始往前比
    • 比它大就往后排
    • 以此类推进行到最后一个数,最后一个是最大的,里面每一轮结束,里面都是有序的
  • 时间复杂度
    • O(n^2)

你可能感兴趣的:(Data,Structure,and,Algorithms,算法,插入排序,排序)