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;
    }
  • 相关阅读:
    Git 中 .gitignore 的配置语法
    DMX512协议
    k8s 报错总结
    yum 源配置
    docker 安装 docker-compose
    docker 搭建 Harbor 仓库
    linux 远程执行命令
    远程从服务器A拷贝文件到服务器B
    docker 搭建私服仓库
    awk和xargs清除docker 容器、镜像
  • 原文地址:https://www.cnblogs.com/tzyy/p/4867961.html
Copyright © 2011-2022 走看看