J'essaie de programmer l'algorithme quicksort de Cormen Algorithm Textbook. Voici mon code.Algorithme de partition 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] + " ");
}
}
}
Mais, je reçois une mauvaise sortie lorsque j'exécute ce code.
Original Array : 5 4 7 2 1 9 3 6 10 8
Sorted Array : 1 4 5 2 6 7 3 8 9 10
Quelqu'un peut-il s'il vous plaît expliquer ce qui ne va pas. J'ai implémenté ce code exactement comme indiqué dans le livre "Introduction aux algorithmes". Je vous remercie.
Merci pour la réponse lasseespheholt. Mon livre contient le pseudocode comme pour j = p à r-1. C'était le seul problème. – Race
@Race: http://en.wikipedia.org/wiki/Quicksort a un algorithme très similaire, bien qu'il semble que pivotIndex et gauche, comme décrit dans cet article, sont combinés dans l'algorithme de votre/the manuel. –
Vous êtes les bienvenus :) –