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 代码优化点滴记录
Feb 19 Javascript
js multiple全选与取消全选实现代码
Dec 04 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 Javascript
JavaScript实现图片瀑布流和底部刷新
Jan 02 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
iscroll实现下拉刷新功能
Jul 18 Javascript
使用原生js+canvas实现模拟心电图的实例
Sep 20 Javascript
jQuery实现影院选座订座效果
Apr 13 jQuery
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程序--记数器
2006/10/09 PHP
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
php 学习资料零碎东西
2010/12/04 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
python循环监控远程端口的方法
2015/03/14 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
Python 字符串与数字输出方法
2018/07/16 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
企业办公室主任岗位职责
2014/02/19 职场文书
本科毕业生自荐信
2014/05/26 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
人民调解协议书范本
2014/10/11 职场文书
教师党员整改措施
2014/10/24 职场文书
谢师宴邀请函
2015/02/02 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js