登录  /  注册
博主信息
博文 82
粉丝 0
评论 1
访问量 125620
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
归并排序
子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong
原创
1107人浏览过

归并排序概念:

归并排序中涉及到一个概念就是分而治之,总序列化成小序列,将小序列排序好,利用排序好的小序列,再归并排序成原来要排序的序列。

所以排序前先要分:

function divide( arr ){
    let len = arr.length;
    if( !len ) return;
    let left = arr.splice(0, Math.floor(len/2) ),
        right = arr;
}

分完之后要合并,我们默认从小到大排序哈,

 function range ( left ,right ){
     let result = [];
     while( left.length && right.length){
         if( left[0] > right[0] ){
             result.push( right.shift() )
         }else{
             result.push( left.shift() )
         }
     }
     while( left.length ){ 
         result.push( left.shift() )
     }
     while( right.length ){
         result.push( right.shift() )
     }
     return result;
 }

然后我们需要将两个方法合并一下,为了保存我们已经排序好的子序列结果,我们在分割方法那儿使用了递归--调用自身和合并方法,最小子序列要为1,所以两个方法最终可以写成:

function rangeSort( arr ){
    if( !arr.length ) return;
    function divide( arr ){
        let len = arr.length;
        if( len < 2 ) return arr;
        let left = arr.splice(0, Math.floor(len/2) ),
            right = arr;
         return range( divide(left),divide(right) )//难点
    }
    function range ( left ,right ){
         let result = [];
         while( left.length && right.length){
             if( left[0] > right[0] ){
                 result.push( right.shift() )
             }else{
                 result.push( left.shift() )
             }
         }
         while( left.length ){ 
             result.push( left.shift() )
         }
         while( right.length ){
             result.push( right.shift() )
         }
         return result;
     }
     return divide( arr );
}

归并排序在要处理的数量级达到某个级别之后(并不是很大),性能摔冒泡排序好几条街,至于为啥快,你可以说成是伟大哲学思想的指导,这样是没错,不过我觉得还是因为计算机结构就是这样吧。

以上内容是看完某个大佬的博文,自己一边理解一边实现的,实话实说,因为已经写得很好了,我就不打算用for再重写了,以免误导到人。

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学