作家
登录

JavaScript中常见排序算法详解

作者: 来源: 2017-11-22 16:00:13 阅读 我要评论

        gap = 1; 
  •  
  •     while(gap < len/3) {          //动态定义距离序列 
  •  
  •         gap =gap*3+1; 
  •  
  •     } 
  •  
  •     for (gap; gap > 0; gap = Math.floor(gap/3)) { 
  •  
  •         for (var i = gap; i < len; i++) { 
  •  
  •             temp = arr[i]; 
  •  
  •             for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) { 
  •  
  •                 arr[j+gap] = arr[j]; 
  •  
  •             } 
  •  
  •             arr[j+gap] = temp
  •  
  •         } 
  •  
  •     } 
  •  
  •     return arr; 
  •  
  • 归并排序

    作为一种典范的分而治之思惟的算法应用,归并排序的实现由两种办法:

    • 自上而下的递归(所有递归的办法都可以用迭代重写,所以就有了第2种办法)
    • 自下而上的迭代

    在《数据构造与算法JavaScript描述》中,作者给出了自下而上的迭代办法。然则对于递归法,作者却认为:

    However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle.

    然而,在 JavaScript 中这种方法不太可行,因为这个算法的递归深度对它来讲太深了。

    说实话,我不太懂得这句话。意思是JavaScript编译器内存太小,递归太深轻易造成内存溢出吗?还望有大年夜神可以或许指教。

    和选择排序一样,归并排序的机能不受输入数据的影响,但表示比选择排序好的多,因为始终都是O(n log n)的时光复杂度。价值是须要额外的内存空间。

    归并排序动图演示

    归并排序JavaScript代码实现:

    1. function mergeSort(arr) {  //采取自上而下的递归办法 
    2.  
    3.     var len = arr.length; 
    4.  
    5.     if(len < 2) { 
    6.  
    7.         return arr; 
    8.  
    9.     } 
    10.  
    11.     var middle = Math.floor(len / 2), 
    12.  
    13.         left = arr.slice(0, middle), 
    14.  
    15.         right = arr.slice(middle); 
    16.  
    17.     return merge(mergeSort(left

        推荐阅读

        为啥你电脑越来越卡 别人却能战五年?

      对于这种的办法:大年夜网页点击下载时要看看下载的文件名,绿色版的软件一般是目标软件的拼音或者英订婚名,多半是紧缩包(就算是安装版也要打包一下的),所以如不雅下载文件名是无序字符串,以及是exe文件,十有八九>>>详细阅读


      本文标题:JavaScript中常见排序算法详解

      地址:http://www.17bianji.com/lsqh/39153.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)