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 相关文章推荐
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
JavaScript中length属性的使用方法
Jun 05 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
Bootstrap导航条的使用和理解3
Dec 14 Javascript
js定时器实例分享
Dec 20 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
JS获取短信验证码倒计时的实现代码
May 22 Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
vue如何将v-for中的表格导出来
May 07 Javascript
Vue.js watch监视属性知识点总结
Nov 11 Javascript
javascript实现多边形碰撞检测
Oct 24 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
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
浅析php header 跳转
2013/06/17 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
python定时器使用示例分享
2014/02/16 Python
Python列表计数及插入实例
2014/12/17 Python
python生成lmdb格式的文件实例
2018/11/08 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
Python爬虫教程知识点总结
2020/10/19 Python
python基于openpyxl生成excel文件
2020/12/23 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
工作失职检讨书范文
2014/01/16 职场文书
信访工作汇报材料
2014/10/27 职场文书
2016银行求职自荐信
2016/01/28 职场文书
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js