Tri rapide

Principe

  1. Partager le tableau en deux parties (pas nécessairement de même taille) , de façon à  obtenir :
    • Une case dont le contenu constitue la « valeur pivot »
    • En dessous de cette case, on ne doit avoir que des valeurs inférieures ou égales à  la valeur pivot
    • Au-dessus de cette case, on ne doit avoir que des valeurs supérieures à  la valeur pivot

    Remarquer que par constuction, la case pivot se trouve à  la bonne place par rapport au résultat final.
  2. Effectuer l'opération précédente sur la partie basse du tableau (au-dessous de la case pivot), puis sur la partie haute (au-dessus de la case pivot)
  3. Effectuer ainsi des découpes successives jusqu'à   n'avoir que des « morceaux » de 0, 1 ou 2 cases
    Pour trier 0 ou 1 case, il n'y a rien à  faire
    Pour trier 2 cases, il suffit d'effectuer un test (IF ...)
La méthode est donc récursive (on traite chaque « morceau » de la même façon qu'on a traité l'ensemble).
La majeure partie de l'algorithme réside dans la découpe du tableau (et des sous-tableaux)

Une méthode possible :

  1. Le contenu de la case n° 1 est pris arbitrairement comme valeur pivot
  2. En partant de la case n° 2, et en remontant vers le haut du tableau :
    On compare le contenu de la case sur laquelle on est positionné à  la valeur pivot
    Si ce contenu est supérieur à  la valeur pivot, on l'échange avec celui de la dernière case du tableau
    Si en remontant on trouve une autre valeur supérieure à  la valeur pivot, on l'échange avec l'avant-dernière case du tableau, et ainsi de suite
    On remplit donc la fin du tableau avec des valeurs supérieures à  la valeur pivot
  3. Si on a ainsi alimenté les N dernières cases du tableau, on arrête de remonter à  la N-1ème case en partant de la fin
  4. On échange alors le contenu de cette case avec celui de la 1ère case du tableau, c'est à  dire la valeur pivot
  5. Dans la case où on est positionné se trouve donc la valeur pivot
    Dans les cases situées au-dessus se trouvent toutes les valeurs supérieures à  la valeur pivot
    Dans les cases situées au-dessous se trouvent toutes les valeurs inférieures ou égales à  la valeur pivot
  6. On procède de la même façon pour chaque sous-tableau situé de part et d'autre de la case pivot

Algorithme

TriRapide (Tableau, IMin, IMax)

Exemple

Tableau à  trier : [7,5,1,9,2]

1 2 3 4 5
7 5 1 9 2 Valeur pivot=7 : - Case à  alimenter : n° 5
7 5 1 9 2 Comparaison du contenu de la case n° 2 à  la valeur pivot
7 5 1 9 2 Comparaison du contenu de la case n° 3 à  la valeur pivot
7 5 1 9 2 Comparaison du contenu de la case n° 4 à  la valeur pivot
7 5 1 2 9 Echange du contenu des cases n° 4 et 5 ; Case à  alimenter : n° 4 (5-1)
2 5 1 7 9 Puisque Case à  alimenter=Case courante, on s'arrête et on échange les contenus de la case courante et de la case n°1 (pivot)
 
2 5 1     Tableau bas : valeur pivot=2 - Case à  alimenter : n° 3
2 5 1    
2 1 5    
1 2 5    
1 2 5 7 9 Tous les sous- tableaux restant à  traiter ne comportant qu'une case, le tri est terminé
         

Exemple de programme en Visual Basic

Remarques

Variantes

Utilisation

C'est la méthode qui, en moyenne, donne les meilleurs résultats. Elle n'est pas très simple à  programmer, mais permet de nombreuses variantes.

La performance repose sur la méthode de découpe du tableau et la distribution initiale des valeurs, l'idéal étant de pouvoir obtenir des sous-tableaux de taille aussi proche que possible à  chaque étape (ce qu'on ne peut guère prévoir à  priori, en général).

Les performances peuvent être désastreuses (bien plus mauvaises qu'avec n'importe quelle autre méthode) lorsque les sous-tableaux obtenus sont très déséquilibrés (par exemple, un tableau initialement trié en inverse, avec l'algorithme de découpe décrit plus haut).

Retour à  la table des matières des tris


Dernière mise à jour de cette page : 12/8/2007