Ho provato a implementare quicksort in Java ma non funziona. Non ho idea di dove sia andato storto. Ecco quello che ho finora:
public static void quicksort(int[] array, int left, int right) {
if (left >= right) {
return;
}
int pivot = new SplittableRandom().nextInt(right - left) + left;
int pivotValue = array[pivot];
int i = left;
int j = right;
int buffer;
while (i < j) {
if (array[i] > pivotValue) {
if (array[j] < pivotValue) {
buffer = array[i];
array[i] = array[j];
array[j] = buffer;
} else {
j--;
}
} else {
i++;
}
}
array[pivot] = array[i];
array[i] = pivotValue;
quicksort(array, left, i-1);
quicksort(array, i+1, right);
}
risposte:
0 per risposta № 1È più semplice con un esempio e ancora più semplice con un semplice esempio.
int[] myArray = { 1, 0 };
YourClass.quicksort(myArray, 0, myArray.length - 1);
Supponiamo ora che il tuo metodo selezioni pivot
0, quindi pivotValue
1. Ora prova a capire in che modo il tuo metodo prende la prima iterazione di while
ciclo continuo. Quindi, qual è il valore di i
dopo quella iterazione? Cosa succede dopo? Se riesci a rispondere a queste domande, penso che puoi anche capire come il tuo codice va storto.
Intendo anche quello che ho detto in un commento: è qui che devi imparare a usare un debugger. L'investimento nell'apprendimento ripagherà molte volte durante la tua carriera.