js 3种归并操作的实例代码


Posted in Javascript onOctober 30, 2013

第一种:

/**良哥的*/
function merge(a, b) {
    var aLen = a.length,
        bLen = b.length,
        maxLen = Math.max(aLen, bLen),
        sumLen = aLen + bLen,
        result = [],
        ap = 0,
        bp = 0;
     while (result.length < sumLen) {
        if (ap < aLen && bp < bLen) {
            if(a[ap] > b[bp]){
                result.push(b[bp++]);
            } else {
                result.push(a[ap++]);
            }
        } else if (!(ap < aLen)){
            while(bp < bLen){
                result.push(b[bp++]);
            }
        } else if (!(bp < bLen)){
            while(ap < aLen){
                result.push(a[ap++]);
            }
        }
    }
    return result;
}

第二种:

/**鲁军*/
function merge(arr1, arr2){    var i = 0;
    var j = 0;
    var c = 0;
    var k;
    var len1 = arr1.length;
    var len2 = arr2.length;
    var arr = [];
    for(;i<len1 && j<len2;){
        if( arr1[i] > arr2[j]  ){
            arr.push( arr2[j] );
            j++;
        }else{
            arr.push( arr1[i] );
            i++;
        }
        //if(i==len1 || j==len2){
        //    break;
        //}
    }
    if(i==len1){
        //arr = arr.concat(arr2.slice(j));
        for(k=j; k<len2; k++){
            arr.push( arr2[k] );
        }
    }
    if(j==len2){
        //arr = arr.concat(arr1.slice(i))
        for(k=i; k<len1; k++){
            arr.push( arr1[k] );
        }
    }
    return arr;
}

第三种:

/*金锐的*/
function merge(a,b){
    var x = 0;
    var l = 0;
    var list = [];
    var aLen = a.length;
    var bLen = b.length;    for(var i = 0; i < bLen; i++){
        for(var j = x; j < aLen; j++){
            if(b[i] < a[j]){
                list.push(b[i]);
                l = i;
                break;
            }else{                
                list.push(a[j]);
                x++;
            }
        }     
    }            

    if(x == a.length){
        for(var y = l; y < bLen; y++){
            list.push(b[y]);
        }
    }else{
        for(var z = x; z < aLen; z++){
            list.push(a[z]);
        }
    }
    return list;
}

经过测试2个有序20W长度的数组归并耗时都在15毫秒以下。

以下有几条经验(在大量操作的时候才能体现,平时不需要做这样的优化。代码可读性还是第一原则)

1:数组的concat方法比直接for循环push要慢。

2:for循环比while循环快。

3:var a = b || 3; //这种操作很消耗时间

4: break,continue 在已确定不需要再循环时很耗时。

Javascript 相关文章推荐
在chrome中window.onload事件的一些问题
Mar 01 Javascript
JQuery 弹出框定位实现方法
Dec 02 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
js中function()使用方法
Dec 24 Javascript
javascript怎么禁用浏览器后退按钮
Mar 27 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
js内置对象处理_打印学生成绩单的简单实现
Sep 24 Javascript
对Angular.js Controller如何进行单元测试
Oct 25 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
详解Angular结合zTree异步加载节点数据
Jan 20 Javascript
使用vue + less 实现简单换肤功能的示例
Feb 21 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 Javascript
javascript获取选中的文本的方法代码
Oct 30 #Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 #Javascript
js实现收缩菜单效果实例代码
Oct 30 #Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 #Javascript
利用javascript实现web页面中指定区域打印
Oct 30 #Javascript
javascript ajax 仿百度分页函数
Oct 29 #Javascript
JS禁用浏览器退格键实现思路及代码
Oct 29 #Javascript
You might like
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
Yii使用技巧大汇总
2015/12/29 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
js的各种数据类型判断的介绍
2019/01/19 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python实现点对点聊天程序
2018/07/28 Python
python批量处理txt文件的实例代码
2020/01/13 Python
Python自动化操作实现图例绘制
2020/07/09 Python
python绘制雷达图实例讲解
2021/01/03 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
2014年开学第一课活动方案
2014/03/06 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
边城读书笔记
2015/06/29 职场文书
golang 语言中错误处理机制
2021/08/30 Golang
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫