Il faut écrire une fonction de comparaison. Imaginons cette fonction déjà écrite, pour dautres parties du programme, sous la forme :
int compare(int *a, int *b)
Dans ce cas, il faudrait appeler qsort
sous la forme :
qsort(table, 100, sizeof(int), (int (*)(const void*, const void*)) compare);
ce qui est un changement de type tout à fait acceptable quoique fort pénible à écrire. Dans la pratique, pour des types aussi simples que int
, on écrira une fonction de comparaison ayant le bon type, quitte à faire un changement de type un peu délicat à lintérieur. En écrivant un programme complet, on obtient ainsi :
// essai de qsort #include <stdlib.h>#include <iostream.h> const Ntab = 100 // taille du tableau void init_table(int n, int *tab)// remplit la table de n nombres aléatoires{ while (n-- > 0) *tab++ = random(1000);} ,void aff_table(int n, const int *tab)// affiche la table{ while (n-- > 0) cout << *tab++ << '\t'; cout << '\n';} int comp_int(const void *a, const void *b)// comparaison pour qsort{ return *(int*) a - *(int*) b;} main(){ int table[Ntab]; init_table(Ntab, table); cout << "\n\nTable non triée :\n"; aff_table(Ntab, table); qsort(table, Ntab, sizeof(int), comp_int); cout << "\n\nTable triée :\n"; aff_table(Ntab, table); return 0;}
Le tri de 100 nombres prend environ 0.036 seconde sur notre machine, et celui de 1000 environ 0.52 seconde ; dans les deux cas, la majorité du temps se déroule en comparaisons.