qsort
Effectue un tri rapide. Des versions plus sécurisées de ces fonctions sont disponibles ; consultez qsort_s.
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
Paramètres
base
Début du tableau cible.num
Taille du tableau en éléments.width
Taille des éléments en octets.compare
Pointeur vers une routine fournie à l'utilisateur qui compare deux éléments du tableau et retourne une valeur qui indique leur relation.
Notes
La fonction qsort implémente un algorithme de tri rapide qui range un tableau de numéléments, chacun dewidthoctets. L'argument base est un pointeur vers la base du tableau à trier. qsort reécrit sur ce tableau en utilisant les éléments rangés.
qsort appelle la routine compare une ou plusieurs fois lors du tri, et passe les pointeurs vers deux éléments de tableau à chaque appel.
compare( (void *) & elem1, (void *) & elem2 );
La routine compare les éléments et retourne l'une des valeurs suivantes.
La fonction compare retourne une valeur |
Description |
---|---|
< 0 |
elem1 inférieure à elem2 |
0 |
elem1 est équivalent à elem2 |
> 0 |
elem1 supérieur à elem2 |
La table est trié en ordre croissant, comme défini par la fonction de comparaison. Pour trier une table par ordre décroissant, inverser le sens « supérieur à » et « inférieur à » de la fonction de comparaison.
Cette fonction valide ses paramètres. Si compare ou num est NULL, ou si base est NULL et *num est différent de zéro, ou si width est inférieure à zéro, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, la fonction retourne -1 et définit errno avec la valeur EINVAL.
Configuration requise
Routine |
En-tête requis |
---|---|
qsort |
<stdlib.h> et <malloc.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité.
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 );
}
Équivalent .NET Framework
System::Collections::ArrayList::Sort