Partager via


qsort

Effectue un tri rapide. Une version plus sécurisée de cette fonction est disponible ; voir qsort_s.

Syntaxe

void qsort(
   void *base,
   size_t number,
   size_t width,
   int (__cdecl *compare )(const void *, const void *)
);

Paramètres

base
Début du tableau cible.

number
Taille du tableau dans les éléments.

width
Taille d’élément en octets.

compare
Pointeur désignant une routine fournie par l’utilisateur qui compare deux éléments de tableau et retourne une valeur qui spécifie leur relation.

Notes

La fonction qsort implémente un algorithme de tri rapide pour trier un tableau d’éléments number, chacun de width octets. L’argument base est un pointeur désignant la base du tableau à trier. qsort remplace ce tableau en utilisant les éléments triés.

qsort appelle la routine compare une ou plusieurs fois pendant le tri, et transmet les pointeurs à deux éléments de tableau à chaque appel. Si compare deux éléments sont identiques, leur ordre dans le tableau trié résultant n’est pas spécifié.

compare(const void *elem1, const void *elem2);

La routine compare les éléments et retourner l’une des valeurs suivantes.

Valeur de retour de la fonction compare Description
< 0 elem1 inférieure à elem2
0 elem1 équivalent à elem2
> 0 elem1 supérieur à elem2

Le tableau est trié par ordre croissant, comme défini par la fonction de comparaison. Pour trier un tableau par ordre décroissant, changez le sens de « supérieur à » et « inférieur à » dans la fonction de comparaison.

Cette fonction valide ses paramètres. Si compare ou number est NULL, ou s’il base est NULL différent number de zéro, ou s’il width est inférieur à zéro, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à continuer, la fonction retourne et errno est définie sur EINVAL.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Routine En-tête requis
qsort <stdlib.h> et <search.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_qsort.c
// arguments: every good boy deserves favor

/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

int main( int argc, char **argv )
{
   int i;
   /* Eliminate argv[0] from sort: */
   argv++;
   argc--;

   /* Sort remaining args using Quicksort algorithm: */
   qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );

   /* Output sorted list: */
   for( i = 0; i < argc; ++i )
      printf( " %s", argv[i] );
   printf( "\n" );
}

int compare( const void *arg1, const void *arg2 )
{
   /* Compare all of both strings: */
   return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
boy deserves every favor good

Voir aussi

Recherche et tri
bsearch
_lsearch