ここには私が書いたquicksortコードです。ベースケースに届かないため機能しません。ピボットをr
とl
にコンソールに記録すると、ソート関数が何回呼び出されても同じままです。したがって、引数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()」を呼び出すだけで何が問題なのですか? –