js实现多种排序算法(算法导论第二章)

栏目: JavaScript · 发布时间: 6年前

  1. 插入排序:

    var a = [1,7,4,2,17,13,9]

    function insertionSort(arr){

    arr.map((d,index)=>{
           let i = index
           while(d<arr[i-1]&&i-1>0){
               [arr[i-1],arr[i]]=[arr[i],arr[i-1]]
               i--
           }
       })

    }

    insertionSort(a)

  2. 归并排序(非hack)

    function merge (arr,l,m,r){

    var left = []
       var right = []
       for (let i =l;i<m;i++){
           // console.log(i)
           left.push(arr[i])
       }
       for(let j = m;j<=r;j++){
           right.push(arr[j])
           // console.log(j)
       }
       left.push(Infinity)
       right.push(Infinity)
       console.log(left,right)
       var i =0
       var j =0
       for(let k =l;k<r+1;k++){
    
           if(left[i]<right[j]){
               arr[k]=left[i]
               i++
           }else{
               arr[k]=right[j]
               j++
           }
       }

    }

    function mergeSort(arr,l,r){

    if(r>l){
           var m=Math.ceil((l+r)/2)
           // console.log(m)
           mergeSort(arr,l,m-1)
           mergeSort(arr,m,r)
           merge(arr,l,m,r)
       }

    }

  3. 归并排序(酷炫简单)

    function merge(left, right) {

    var tmp = [];
    
     while (left.length && right.length) {
       if (left[0] < right[0])
         tmp.push(left.shift());
       else
         tmp.push(right.shift());
     }
    
     return tmp.concat(left, right);

    }

    function mergeSort(a) {

    if (a.length === 1) 
       return a;
    
     var mid = ~~(a.length / 2)
       , left = a.slice(0, mid)
       , right = a.slice(mid);
    
     return merge(mergeSort(left), mergeSort(right));

    }


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective STL中文版

Effective STL中文版

[美] Scott Meyers / 潘爱民、陈铭、邹开红 / 电子工业出版社 / 2013-5 / 59.00元

《Effective STL中文版:50条有效使用STL的经验》是EffectiveC++的第3卷,被评为“值得所有C++程序员阅读的C++书籍之一”。《Effective STL中文版:50条有效使用STL的经验》详细讲述了使用STL的50条指导原则,并提供了透彻的分析和深刻的实例,实用性极强,是C++程序员必备的基础书籍。C++的标准模板库(STL)是革命性的,要用好STL并不容易。《Effe......一起来看看 《Effective STL中文版》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具