zoukankan      html  css  js  c++  java
  • 排序算法——插入排序

    排序思路

    从头开始遍历数组arr

    将位置i处的数字与位置在0~i-1区间的数字比较(可以认为0~i-1区间内的数字是已经排好序的)

    若0~i-1区间中的数字n>=arr[i],则将arr[i]插入n之前

    javascript实现

    function insertionSort(arr){
        if(!(arr instanceof  Array)) return [];
        if(arr.length<=1) return arr;
        var res=[],//结果数组
            cur,//当前待插入的值
            index;//指针位置
        while(arr.length){
            cur=arr.pop();
            index=0;
            //遍历结果数组,定位cur应该插入的位置
            res.every(function (n,i) {
                index=i;
                if(n>=cur){
                    //结束本次every
                    return false;
                }
                //若结果数组中没有元素大于待插入元素,指针应该移动到最后边
                index=i+1;
                return true;
            });
            //插入当前数字
            res.splice(index,0,cur);
        }
        return res;
    }

    这种实现用一个新数组来存储已经排好序的部分,便于理解。

    下面这种比较精简一点

    function insertionSort(arr){
        if(!(arr instanceof  Array)) return [];
        if(arr.length<=1) return arr;
        var index,insertIndex;
        arr.forEach(function (n,i) {
            for(index=0,insertIndex=0;index<i;index++){
                insertIndex=index;
                if(arr[index]>=n){
                    break;
                }
                insertIndex=index+1;
            }
            arr.splice(insertIndex,0,arr.splice(i,1)[0]);
        });
        return arr;
    }
  • 相关阅读:
    问题 I: 夫子云游
    问题 H: 小k的简单问题
    问题 G: 圆桌上的晚餐
    问题 F: 超超的自闭意思
    promise与aysnc 与EventProxy
    node的实践(项目三)
    node的实践(项目二)
    node不懂的方法的使用
    github
    node的实践(项目一)
  • 原文地址:https://www.cnblogs.com/tzyy/p/4867961.html
Copyright © 2011-2022 走看看