[QSort]Problème de compréhension
Bonjour,
J'aimerai comprendre l'algorithme du Qsort. Pour ce faire, j'ai regardé sur wikipédia et pour être plus précis sur le morceau de code quasiment tout en bas en C, que voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| void quickSort(int tableau[], int p, int r) {
int q;
if(p<r)
{
q = partitionner(tableau, p, r);
quickSort(tableau, p, q);
quickSort(tableau, q+1, r);
}
}
int partitionner(int tableau[], int p, int r) {
int pivot = tableau[p], i = p-1, j = r+1;
int temp;
while(1)
{
do
j--;
while(tableau[j] > pivot);
do
i++;
while(tableau[i] < pivot);
if(i<j)
{
temp = tableau[i];
tableau[i] = tableau[j];
tableau[j] = temp;
}
else
return j;
}
return j;
} |
A sa simple vue je ne comprends pas le While(1)... Est ce que quelqu'un pourrait m'expliquer? car j'ai l'impression que ça va boucler à l'infini.
De plus j'ai voulu le faire à la main... pour être sur de bien comprendre le raisonnement.
J'ai pris le tableau : tab=[1;5;6;3]. et j'ai "executé" avec quicksort(tab,1,4).
j'ai bien une incohérence dans le morceau de code partitionner.
Code:
1 2 3 4 5 6 7
| pivot=tab(1)=1
i=0, j=5
tab(4)>pivot? Non
tab(3)>pivot ? non
tab(2)>pivot? Non
tab(1)>pivot ? non
tab(0)>pivot ben... je ne sais pas... |
Si quelqu'un pouvait m'éclairer sur ces quelques points.