NOM¶
qsort, qsort_r - Trier un tableau
SYNOPSIS¶
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
void qsort_r(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *, void *),
void *arg);
Exigences de macros de test de fonctionnalités pour la glibc (consultez
feature_test_macros(7)) :
qsort_r() : _GNU_SOURCE
DESCRIPTION¶
La fonction
qsort() trie un tableau contenant
nmemb
éléments de taille
size. L'argument
base pointe sur le
début du tableau.
Le contenu du tableau est trié en ordre croissant, en utilisant la fonction
de comparaison pointée par
compar, laquelle est appelée avec
deux arguments pointant sur les objets à comparer.
La fonction de comparaison doit renvoyer un entier inférieur, égal, ou
supérieur à zéro si le premier argument est respectivement
considéré comme inférieur, égal ou supérieur au
second. Si la comparaison des deux arguments renvoie une égalité
(valeur de retour nulle), l'ordre des deux éléments est
indéfini.
La fonction
qsort_r() est identique à
qsort() si ce n'est que
la fonction de comparaison
compar prend un troisième argument. Un
pointeur est passé à la fonction de comparaison à l'aide de
arg. De cette façon, la fonction de comparaison n'a pas besoin
d'utiliser des variables globales à passer à l'aide d'arguments
arbitraires, et est par conséquent réentrante et sécurisée
pour utiliser dans des threads.
VALEUR RENVOYÉE¶
Les fonction
qsort() et
qsort_r() ne renvoient pas de valeur.
VERSIONS¶
qsort_r() a été ajoutée à la glibc dans la
version 2.8.
La fonction
qsort() est conforme à SVr4, 4.3BSD, C89 et C99.
NOTES¶
alphasort(3) et
versionsort(3) font partie des routines de
bibliothèque utilisables comme argument
compar de
qsort().
Pour comparer des chaînes de caractères C, la fonction de
comparaison peut appeler
strcmp(3), comme dans l'exemple ci-dessous.
EXEMPLE¶
Pour un exemple d'utilisation, voir l'exemple de la page
bsearch(3).
Un autre exemple d'utilisation est le programme ci-dessous, qui trie les
chaînes données sur la ligne de commande :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int
cmpstringp(const void *p1, const void *p2)
{
/* Les arguments de cette fonction sont des « pointeurs de
pointeurs sur des caractères », mais les arguments de
strcmp(3) sont des « pointeurs sur des caractères », d'où
le forçage de type et l'utilisation de l'astérisque */
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
int
main(int argc, char *argv[])
{
int j;
if (argc < 2) {
fprintf(stderr, "Utilisation : %s <chaîne>...\n", argv[0]);
exit(EXIT_FAILURE);
}
qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);
for (j = 1; j < argc; j++)
puts(argv[j]);
exit(EXIT_SUCCESS);
}
VOIR AUSSI¶
sort(1),
alphasort(3),
strcmp(3),
versionsort(3)
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Nicolas François
et l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».