這是我寫的quicksort代碼。該功能不起作用,因爲它無法到達基本情況。如果我將密鑰r
和l
記錄到控制檯,則無論調用sort函數多少次,它們都保持不變。所以我想知道l
,r
這個參數是否真的作爲數據傳入函數。爲什麼發生?JavaScript快速排序中的無限遞歸?
function sort(data){
if(data.length < 2){
return data;
}
else{
var l = [];
var r = [];
var pivot = parseInt(data.length/2);
for(i=0; i<data.length; i++){
if(data[i] > data[pivot]){
r.push(data[i]);
}
else{
l.push(data[i]);
}
}
return sort(l).concat(sort(r));
}
}
您正在覆蓋l和r的每次遞歸調用。你應該在你的排序功能之外初始化它們。 – marteljn
@marteljn是的。但是如果我在返回之前放置console.log(l),它會打印相同的數組。所以我很困惑 –
我必須問:只調用'originalArray.sort()'有什麼問題? –