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 unicode 编码解析关于数据转换为中文的两种方法
Apr 21 Javascript
JQuery选择器绑定事件及修改内容的方法
Jan 23 Javascript
Bootstrap每天必学之简单入门
Nov 19 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
bootstrapfileinput实现文件自动上传
Nov 08 Javascript
React如何避免重渲染
Apr 10 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
Jan 24 Javascript
webpack 动态批量加载文件的实现方法
Mar 19 Javascript
VSCode 配置uni-app的方法
Jul 11 Javascript
JavaScript前后端JSON使用方法教程
Nov 23 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
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Python如何进行时间处理
2020/08/06 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
几个数据库方面的面试题
2016/07/01 面试题
课外活动总结范文
2014/07/09 职场文书
企业领导对照检查材料
2014/08/20 职场文书
博士生专家推荐信
2014/09/26 职场文书
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle