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 相关文章推荐
面向对象的javascript(笔记)
Oct 06 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
JavaScript基础知识之数据类型
Aug 06 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
基于vue2.0+vuex的日期选择组件功能实现
Mar 13 Javascript
详解javascript 正则表达式之分组与前瞻匹配
May 30 Javascript
element-ui的回调函数Events的用法详解
Oct 16 Javascript
Vue表单输入绑定的示例代码
Nov 01 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
layui递归实现动态左侧菜单
Jul 26 Javascript
javascript实现前端成语点击验证
Jun 24 Javascript
微信小程序实现倒计时功能
Nov 19 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
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
javascript实用方法总结
2015/02/06 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
pytorch 预训练层的使用方法
2019/08/20 Python
python 内置函数汇总详解
2019/09/16 Python
python离线安装外部依赖包的实现
2020/02/13 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
高一自我鉴定
2013/12/17 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
音乐专业自荐信
2014/02/07 职场文书
就业协议书的作用
2014/04/11 职场文书
养牛场项目建议书
2014/05/13 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
幼儿园开学通知
2015/04/24 职场文书
导游词之上海豫园
2019/10/24 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
CSS极坐标的实例代码
2021/06/03 HTML / CSS