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 函数链之演变
Apr 07 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 Javascript
JavaScript实现复制内容到粘贴板代码
Mar 31 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
jQuery中的deferred对象和extend方法详解
May 08 jQuery
vue 里面使用axios 和封装的示例代码
Sep 01 Javascript
js实现web调用摄像头 js截取视频画面
Apr 21 Javascript
VUE解决 v-html不能触发点击事件的问题
Oct 28 Javascript
Vue实现随机验证码功能
Dec 29 Vue.js
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桌面中心(四) 数据显示
2007/03/11 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
python实现canny边缘检测
2020/09/14 Python
python实现人工蜂群算法
2020/09/18 Python
python中pop()函数的语法与实例
2020/12/01 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
酒店管理专业学生求职信
2013/09/27 职场文书
工业设计专业自荐书
2014/06/05 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
Python 实现Mac 屏幕截图详解
2021/10/05 Python
Elasticsearch 批量操作
2022/04/19 Python