Questo è il codice quicksort che ho scritto. La funzione non funziona perché non può raggiungere il caso base. Se registro il pivot, r
e l
nella console, rimangono invariati indipendentemente dal numero di volte in cui viene chiamata la funzione di ordinamento. Quindi mi chiedo se l'argomento l
, r
non sia realmente passato nella funzione come dati. Perchè è successo?Ricorsione infinita in quicksort 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));
}
}
Si sta sovrascrivendo le singole chiamate ricorsive. Dovresti iniziarli fuori dalla tua funzione di ordinamento. – marteljn
@marteljn Sì. Ma se metto console.log (l) prima del ritorno, stampa gli stessi array. So che sono confuso –
Devo chiedere: Cosa c'è che non va chiamando semplicemente 'originalArray.sort()'? –