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 相关文章推荐
Dojo 学习笔记入门篇 First Dojo Example
Nov 15 Javascript
jQuery解决iframe高度自适应代码
Dec 20 Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
Jun 05 Javascript
javascript判断网页是关闭还是刷新
Sep 12 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
jQuery中$.grep() 过滤函数 数组过滤
Nov 22 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
Jan 11 Javascript
Bootstrap table使用方法记录
Aug 23 Javascript
小程序实现列表点赞功能
Nov 02 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 Javascript
QT与javascript交互数据的实现
May 26 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判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
python中while循环语句用法简单实例
2015/05/07 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
解读python如何实现决策树算法
2018/10/11 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
基于keras中的回调函数用法说明
2020/06/17 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
安踏广告词改编版
2014/03/21 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
贫困证明书范文
2015/06/16 职场文书