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 进度条 实现代码
Jul 30 Javascript
ToolTips JQEURY插件之简洁小提示框效果
Nov 19 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
jQuery弹出层插件Lightbox_me使用指南
Apr 21 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
May 10 Javascript
Ionic3实现图片瀑布流布局
Aug 09 Javascript
jQuery实现广告条滚动效果
Aug 22 jQuery
js定时器实现倒计时效果
Nov 05 Javascript
浅谈node模块与npm包管理工具
Jan 03 Javascript
vue实现列表拖拽排序的功能
Nov 02 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查询ip所在地的方法
2014/12/05 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
python通过yield实现数组全排列的方法
2015/03/18 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
django rest framework 自定义返回方式
2020/07/12 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
第一节英语课开场白
2015/06/01 职场文书
千手观音观后感
2015/06/03 职场文书
新学期开学寄语2016
2015/12/04 职场文书
个人业务学习心得体会
2016/01/25 职场文书
2019安全宣传标语大全
2019/08/14 职场文书