Section courante

A propos

Section administrative du site

QSORT

Tri rapide
Langage C stdlib.h

Syntaxe

void qsort(void *tableau,size_t num,size_t size,int (*compar)(const void *px1,const void *px2);

Paramètres

Nom Description
tableau Ce paramètre permet d'indiquer le tableau à trier
num Ce paramètre permet d'indiquer le nombre d'élément dans le tableau
size Ce paramètre permet d'indiquer la taille d'un item du tableau
compar Ce paramètre permet d'indiquer la fonction a utiliser pour la comparaison et doit retourner une valeur pour indiquer si les items sont inférieur, égale ou supérieur
px1 Ce paramètre permet d'indiquer le premier item fonction a utiliser pour la comparaison
px2 Ce paramètre permet d'indiquer le deuxième item fonction a utiliser pour la comparaison

Description

Cette fonction permet d'effectuer un tri d'un tableau avec la méthode «QuickSort».

Algorithme

MODULE QSORT(base, num, size, compar)
   * Si le nombre d'éléments est inférieur ou égal à 1, ne rien faire
   SI num ≤ 1 ALORS
      RETOURNE
   FIN SI

   * Sélectionner un pivot (souvent l'élément du milieu ou aléatoire)
   pivot_index ← choose_pivot(num)

   * Partitionner le tableau autour du pivot
   left ← 0
   right ← num - 1
   BOUCLE FAIRE TANT QUE leftright
      * Trouver un élément à gauche étant plus grand que le pivot
      BOUCLE FAIRE TANT QUE compar(base + left x size, base + pivot_index x size) < 0
         left ← left + 1
      FIN BOUCLE FAIRE TANT QUE

      * Trouver un élément à droite qui est plus petit que le pivot
      BOUCLE FAIRE TANT QUE compar(base + right x size, base + pivot_index x size) > 0
         right ← right - 1
      FIN BOUCLE FAIRE TANT QUE

      * Si les indices gauche et droit ne se sont pas croisés, échanger les éléments
      SI left ≤ right ALORS
         swap(base + left x size, base + right x size)
         left ← left + 1
         right ← right - 1
      FIN SI
   FIN BOUCLE FAIRE TANT QUE

   * Appliquer récursivement le tri à la partie gauche et droite du tableau
   SI right > 0 ALORS
      * Trier la partie gauche
      qsort(base, right + 1, size, compar)
   FIN SI
   SI left < num ALORS
      * Trier la partie droite
      qsort(base + left x size, num - left, size, compar)
   FIN SI

Remarques

Voir également

Langage de programmation - C - Référence de procédures et fonctions - bsearch
Langage de programmation - C++ - Référence de procédures et fonctions - qsort

Références

Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 204.

Dernière mise à jour : Mardi, le 28 juillet 2015