js 3种归并操作的实例代码
js 3种归并操作的实例代码
发布时间:2016-12-30 来源:查字典编辑
摘要:第一种:复制代码代码如下:/**良哥的*/functionmerge(a,b){varaLen=a.length,bLen=b.length...

第一种:

复制代码 代码如下:

/**良哥的*/

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教程学习
编程开发子分类