第一种:
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;
}
第二种:
第三种:
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 在已确定不需要再循环时很耗时。