• js插入排序


    一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

    • 从第一个元素开始,该元素可以认为已经被排序;
    • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
    • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
    • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
    • 将新元素插入到该位置后;
    • 重复步骤2~5。

    动态演示

    代码实现

    let array = randomArray(1, 100);
    console.log(array);
    let sortArray = insertionSort(array);
    console.log(sortArray);
                
    function insertionSort(array) {
       for (let begin = 1;begin < array.length;begin++) {
           let current = begin;
           while(current > 0 && array[current] < array[current - 1]){
               [array[current], array[current - 1]] = [array[current - 1], array[current]];
                  current--
           }
        }
        return array;
    }
    function randomArray(start,end){
        var a=[],o={},random,step=end-start;
        while(a.length<step){
           random=start+parseInt(Math.random()*step);
           if(!o["x"+random]){
               a.push(random);
               o["x"+random]=1;
              };
        };
        return a;
    };

    运行结果

     优化一

    //插入排序优化一  移位,减少交换值的操作
    function insertionSort1(array) {
        for (let begin = 1;begin < array.length;begin++) {
        let cur = begin;
        let v = array[cur];
        while(cur > 0 && v < array[cur -1]){
            array[cur] = array[cur - 1];
            cur--;
        }
        array[cur] = v;
        }
        return array;
    }

    优化二

    //插入排序优化二  通过二分法
    function insertionSort2(array) {
        for (let i = 0;i < array.length;i++) {
            let insertIndex = search(array, i);
            let cur = array[i];
        for (let j = i;j > insertIndex;j--) {
            array[j] = array[j-1];
        }
        array[insertIndex] = cur;
        }
    }
    //查找要插入的index值
    function search(array, index) { let begin = 0; let end = index; while(begin < end) { let mid = (begin + end) >> 1; if(array[index] < array[mid]) { end = mid; }else{ begin = mid + 1; } } return begin; }
  • 相关阅读:
    elk系统生成请求数据测试承载量、宕机瓶颈shell
    给公司个别安装好的系统环境处理-相当half系统初始化脚本shell
    elk相关启动脚本-shell编写
    ab压力测试
    FILEBEAT+ELK日志收集平台搭建流程
    linux单机部署kafka(filebeat+elk组合)
    linux系统安装MongoDB文档
    Java 生成验证码图片
    Java与数据库学习总结
    java 字节流文件复制方法总结
  • 原文地址:https://www.cnblogs.com/ming1025/p/13864690.html
Copyright © 2020-2023  润新知