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 学习入门篇附实例代码
Mar 16 Javascript
JavaScript采用递归算法计算阶乘实例
Aug 04 Javascript
jQuery实现简单下拉导航效果
Sep 07 Javascript
js实现下拉菜单效果
Mar 01 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
vue element动态渲染、移除表单并添加验证的实现
Jan 16 Javascript
Vue批量图片显示时遇到的路径被解析问题
Mar 28 Javascript
JS插入排序简单理解与实现方法分析
Nov 25 Javascript
JavaScript原生数组函数实例汇总
Oct 14 Javascript
Vue OpenLayer 为地图绘制风场效果
Apr 24 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
解析MySql与Java的时间类型
2013/06/22 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
vue实现匀速轮播效果
2020/06/29 Javascript
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python编程羊车门问题代码示例
2017/10/25 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
python遍历路径破解表单的示例
2020/11/21 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
资产经营总监岗位职责范文
2013/12/01 职场文书
秋季运动会广播稿
2014/02/22 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
2016寒假假期总结
2015/10/10 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript