ホームページ >ウェブフロントエンド >jsチュートリアル >js_javascript スキルの 3 種類のマージ操作のコード例

js_javascript スキルの 3 種類のマージ操作のコード例

WBOY
WBOYオリジナル
2016-05-16 17:18:09885ブラウズ

第一种:

复制代代码如下:

/**梁兄さんの*/
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 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 if( arr1[i ] > arr2[j] ){
arr.push( arr2[j] );
j ;
}else{
arr.push( arr1[i] );
私;
}
//if(i==len1 || j==len2){
// ブレーク;
//}
}

if(i ==len1){
//arr = arr.concat(arr2.slice(j));

for(k=j; k arr.push( arr2[k] );
}
}

if(j==len2){
//arr = arr.concat(arr1.slice(i))
for (k=i; 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 for(var j = x; j < aLen j ){
if(b[i] < a[j]){
list.push(b[i]);
l = i;
休憩;
}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リスト;
}

2 つの連続した 20 W の数グループをテストし、所要時間はすべて 15 秒以下でした。

以下にストリップテストがあります (大量の操作では発生する可能性があり、平時にはこのような拡張を行う必要はありません。コードは最初の基準です)

1: 数組の concat メソッドは直接循環プッシュに比べて遅い。

2:循環比しながら循環が早いです。

3:var a = b || 3; //この操作には時間がかかります

4: 再循環の必要がないと判断された時間に休憩、続行します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。