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 相关文章推荐
js获取单元格自定义属性值的代码(IE/Firefox)
Apr 05 Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
Jun 24 Javascript
JQuery中$.ajax()方法参数详解及应用
Dec 12 Javascript
JQuery的attr 与 val区别
Jun 12 Javascript
JavaScript mixin实现多继承的方法详解
Mar 30 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
基于ES6作用域和解构赋值详解
Nov 03 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 Javascript
详解javascript函数写法大全
Mar 25 Javascript
JavaScript判断数组类型的方法
Oct 23 Javascript
详解Vue的options
May 15 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
python写的一个文本编辑器
2014/01/23 Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
Python实现中值滤波去噪方式
2019/12/18 Python
快速查找Python安装路径方法
2020/02/06 Python
世界上最好的足球商店:Unisport
2019/03/02 全球购物
医生实习工作总结的自我评价
2013/09/27 职场文书
博士学位自我鉴定范文
2013/12/26 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
二手车转让协议书
2015/01/29 职场文书
2016十一国庆节感言
2015/12/09 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android
Nginx缓存设置案例详解
2021/09/15 Servers