#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 ptr2ptr1 est égale à celle pointée par ptr2ptr1 est supérieure à celle pointée par ptr2Cette 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 :