Sto provando a programmare l'algoritmo di quicksort da Cormen Algorithm Textbook. Di seguito è il mio codice.Algoritmo di partizione QuickSort
class Quicksort
{
public void qSort(int[] a, int p, int r)
{
if(p<r)
{
int q = Partition(a, p,r);
qSort(a, p, q-1);
qSort(a, q+1, r);
}
}
private int Partition(int[] a, int p, int r)
{
int x = a[r];
int i = p-1;
int temp=0;
for(int j=p; j<r-1; j++)
{
if(a[j]<=x)
{
i++;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
temp = a[i+1];
a[i+1] = a[r];
a[r] = temp;
return (i+1);
}
}
public class QuickSortTest
{
public static void main(String[] args)
{
Quicksort qsort = new Quicksort();
int[] array = {5, 4, 7, 2, 1, 9, 3, 6, 10, 8};
System.out.print("Original Array : ");
for(int i=0; i<array.length;i++)
{
System.out.print(array[i] + " ");
}
int length = array.length;
qsort.qSort(array, 0, length-1);
System.out.print("Sorted Array : ");
for(int i=0; i<array.length;i++)
{
System.out.print(array[i] + " ");
}
}
}
Ma, quando eseguo questo codice, ottengo un output errato.
Original Array : 5 4 7 2 1 9 3 6 10 8
Sorted Array : 1 4 5 2 6 7 3 8 9 10
Qualcuno può spiegare cosa c'è che non va. Ho implementato questo codice esattamente come indicato nel libro "Introduzione agli algoritmi". Grazie.
Grazie per la risposta lasseespheholt. Il mio libro contiene lo pseudocodice come per j = p a r-1. Questo era l'unico problema. – Race
@Race: http://en.wikipedia.org/wiki/Quicksort ha un algoritmo molto simile, anche se sembra che pivotIndex e left, come descritto in quell'articolo, siano combinati nell'algoritmo del tuo libro di testo. –
Prego :) –