HOBBES World.com

Algorithmes
Accueil
Bubble Sort
Quick Sort
Heap Sort
Exos

Menu Général
Informatique
Programmation
Loisirs
Outils
Divers
Accueil

Log In


Login à vie

Créer un compte
Mot de passe

Quick Sort / Tri Rapide



  1. Principe

Le Quick Sort est assez simple à comprendre, mais assez compliqué à transcrire en algorithme. Le Quick Sort consiste à trier un tableau en le découpant récursivement en 2 sous tableaux, où les éléments du premier tableau sont inférieurs aux éléments du second. En faisant une opération récursive, on découpe le tableau en élément de plus en plus petit, jusqu'à arriver à un sous tableau à un seul élément, qui est donc forcément trié. Ensuite, en remontant, les éléments sont triés petit à petit.


  2. Algorithme

L'algorithme se découpe en 2 fonctions : une fonction SPLIT qui s'occupe de réarranger le tableau, et une fonction QUICKSORT qui gère la récursivité et le découpage en sous tableaux.
Procédure SPLIT (Element : Tableau; K, L, I: Entier)
  I <- K
  J <- L+1
  X <- Element (I)
  REPETER
    REPETER
      J <- J-1
    JUSQU'A (Element (J) < X) ou (I = J)
    Element (I) <- Element (J)
    TANT QUE (I < J) et (Element (I) <= X) FAIRE
      I <- I+1
    FIN TANT QUE
    Element (J) <- Element (I)
  JUSQU'A I = J
  Element (I) <- X
Fin Procédure

Procédure QUICKSORT (Element: Tableau; K, L: Entier)
  SI K < L ALORS
    SPLIT (Element , K, L, I)
    QUICKSORT (Element, K, I-1)
    QUICKSORT (Element, I+1, L)
  FIN SI
Fin Procédure

Variables :
NomFonction
ICompteur correspondant à l'indice du pivot (indice de l'élément qui sépare les sous-tableaux)
JCompteur courant dans le tableau
KPremier indice du tableau
LDernier indice du tableau
XValeur du premier élément du tableau
ElementTableau (ou liste, pile...) à trier



  4. Exemples


  4. 1. PHP

function mysplit(&$TopDest, &$K, &$L, &$I) {
  $I = $K;
  $J = $L+1;
  $X = $TopDest[$I];
  do {
    do {
      $J = $J-1;
    }
    while (($TopDest[$J] > $X) && ($I <> $J));
    $TopDest[$I] = $TopDest[$J];
    while (($I < $J) && ($TopDest[$I] <= $X)) {
      $I = $I+1;
    }
    $TopDest[$J] = $TopDest[$I];
  }
  while ($I != $J);
  $TopDest[$I] = $X;
}

function quicksort (&$TopDest, $K, $L) {
  if ($K < $L) {
    mysplit ($TopDest, $K, $L, $I);
    quicksort ($TopDest, $K, $I-1);
    quicksort ($TopDest, $I+1, $L);
  }
}


  4. 2. ASP / Visual Basic

Sub split(TopDest(), K, L, I)
  dim J
  dim X

  I = K
  J = L+1
  X = TopDest(I)
  do
    do
      J = J-1
    loop until (TopDest(J) < X) or (I = J)
    TopDest(I) = TopDest(J)
    do while (I < J) and (TopDest(I) <= X)
      I = I+1
    loop
    TopDest(J) = TopDest(I)
  loop until I = J
  TopDest(I) = X
end Sub

Sub quicksort (TopDest, K, L)
  dim I
  if K < L then
    split TopDest, K, L, I
    quicksort TopDest, K, I-1
    quicksort TopDest, I+1, L
  end if
end Sub




  » Commentaires

Aucun commentaire pour cette page.

Si vous souhaitez ajouter un commentaire, vous devez être identifié


 Page modifiée le : 29/07/2003
Site modifié le : 02/04/2008
  Flux RSS : cliquez-ici si vous voulez suivre les évolutions
Contacter le webmaster : si vous trouvez qu'il manque des infos, n'hésitez pas à me le dire !
© HobbesWorld - /algorithmes/quicksort.php