我想實現使用javascript合併排序。 以下是我發現的代碼在邏輯上合理,但在運行時失敗。Javascript:這個JavaScript實現合併排序有什麼問題?
var a = [];
for(i = 0 ; i < 10; i++){
a.push(parseInt(Math.random()*100000));
}
function merge(a1, a2){
var res = [];
var i = 0, j = 0;
while(i < a1.length && j < a2.length){
if(a1[i] < a2[j])
res.push(a1[i++]);
else
res.push(a2[j++]);
}
while(i < a1.length)
res.push(a1[i++]);
while(j < a2.length)
res.push(a2[j++]);
return res;
}
function mergeSort(a){
if(a.length <= 1)
return a;
var q = a.length/2;
x = mergeSort(a.slice(0,q));
y = mergeSort(a.slice(q));
return merge(x,y);
}
而mergeSort(a)方法中鏡像更改的代碼給出了所需的結果。 輕微改變的代碼如下:
var a = [];
for(i = 0 ; i < 10; i++){
a.push(parseInt(Math.random()*100000));
}
function merge(a1, a2){
var res = [];
var i = 0, j = 0;
while(i < a1.length && j < a2.length){
if(a1[i] < a2[j])
res.push(a1[i++]);
else
res.push(a2[j++]);
}
while(i < a1.length)
res.push(a1[i++]);
while(j < a2.length)
res.push(a2[j++]);
return res;
}
function mergeSort(a){
if(a.length <= 1)
return a;
var q = a.length/2;
return merge(mergeSort(a.slice(0,q)),mergeSort(a.slice(q)));
}
謝謝你,「var'ing他們固定的問題。通過這個,我已經瞭解到,如果我不改變他們,那麼他們不屬於本地範圍。 –