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 相关文章推荐
基于JQuery的Pager分页器实现代码
Jul 17 Javascript
基于jQuery试卷自动排版系统
Jul 18 Javascript
Js获取事件对象代码
Aug 05 Javascript
JavaScript实用技巧(一)
Aug 16 Javascript
加载 Javascript 最佳实践
Oct 30 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
面包屑导航详解
Dec 07 Javascript
vue--点击当前增加class,其他删除class的方法
Sep 15 Javascript
javascript实现动态时钟的启动和停止
Jul 29 Javascript
详解Vue.js 响应接口
Jul 04 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
Jul 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
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
js生成word中图片处理方法
2018/01/06 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
vant实现购物车功能
2020/06/29 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python科学计算之Pandas详解
2017/01/15 Python
python rsa 加密解密
2017/03/20 Python
Python类的动态修改的实例方法
2017/03/24 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
如何给Python代码进行加密
2020/01/10 Python
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
大学生个人先进事迹材料范文
2014/05/03 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS