#include <stdlib.h> // <cstdlib> en C++
void qsort( void * array, size_t elementCount, size_t elementSize, int (*compareFunction)( const void*, const void* ) );
Permet de trier un tableau d'éléments. Tous les éléments du tableau doivent être du même type (entiers, flottants, ...), mais vous
avez le choix sur le type des éléments contenus. Comme la fonction qsort
ne connais pas à l'avance ce type d'éléments,
vous devez lui spécifier un certains nombre d'informations et notamment une fonction permettant de comparer les éléments deux à deux.
Comme c'est vous qui spécifiez la fonction de comparaison, vous avez le contrôle sur l'ordre de tri (ordre croissant ou ordre décroissant).
Après l'appel de cette fonction, le tableau contiendra les éléments ordonnés.
void *
afin de permettre de
contenir des éléments basés sur un type quelconque.
sizeof
pour obtenir cette taille.
int (*compareFunction)( const void * ptr1, const void * ptr2 )
. Cette fonction doit, de plus,
renvoyer :
ptr1
est inférieure à celle pointée par ptr2
ptr1
est égale à celle pointée par ptr2
ptr1
est supérieure à celle pointée par ptr2
Cette fonction ne renvoie aucune valeur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <stdio.h> #include <stdlib.h> #define INT_ARRAY_COUNT 6 #define DOUBLE_ARRAY_COUNT 7 int intComparator ( const void * first, const void * second ) { int firstInt = * (const int *) first; int secondInt = * (const int *) second; return firstInt - secondInt; } int doubleComparator ( const void * first, const void * second ) { int firstDouble = * (const double *) first; int secondDouble = * (const double *) second; return (int) (firstDouble - secondDouble); } int main() { int intArray[] = { 10, 50, 30, 20, 40, 60 }; double doubleArray[] = { 1.2, 6.4, 7.4, 2.9, 4.3, 5.6, 8.1 }; qsort( intArray, INT_ARRAY_COUNT, sizeof(int), intComparator ); qsort( doubleArray, DOUBLE_ARRAY_COUNT, sizeof(double), doubleComparator ); for( int i=0; i<INT_ARRAY_COUNT; i++ ) { printf( "%u - ", intArray[i] ); } printf( "\n" ); for( int i=0; i<DOUBLE_ARRAY_COUNT; i++ ) { printf( "%5.2lf - ", doubleArray[i] ); } printf( "\n" ); return 0; } |
Pour compiler et exécuter ce programme veuillez procéder ainsi :
$> gcc -Wall -o sample sample.c $> ./sample 10 - 20 - 30 - 40 - 50 - 60 - 1.20 - 2.90 - 4.30 - 5.60 - 6.40 - 7.40 - 8.10 - $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :