Soit la fonction qsort de la bibliothèque standard du C. Elle permet, comme son nom l'indique d'appliquer un algorithme de tri rapide sur un tableau d'éléments quelconques, a condition bien sur de fournir une fonction permettant de les comparer. Voici son prototype :
void qsort (void *base,
size_t nmemb,
size_t size,
int (*compar)(const void *, const void *))
Les arguments ont les significations suivantes :
Les trois premiers arguments se passent de commentaire. En revanche, analysons le 4ième.
Il s'agit d'un pointeur de fonction (nommé compar) laquelle renvoie un entier et prend 2 pointeurs sur void en argument. Ces 2 derniers vont recevoir les adresses des éléments à comparer. Les pointeurs sont sur void car la fonction se doit d'être aussi générique que possible.
Nous allons utiliser qsort pour trier un tableau d'entiers :
/* Fonction de comparaison : */
int comparaisonEntiers(const void *g, const void *d)
/* Doit renvoyer -1 si *g < * d
0 si *g == *d
1 si *g > *d
*/
{
const int *gi=(const int *)g;
const int *di=(const int *)d;
if (*gi < *di)
return -1;
if (*gi == *di)
return 0;
return 1;
}
#define TAILLE 10
int main(int argc, char *argv[])
{
int tableau[TAILLE]={0, 5, 3, 7, 8, 4, 2, 6, 5, 3};
int i=0;
qsort(tableau, TAILLE, sizeof(int), &comparaisonEntiers);
for (i=0;
i;
++i)
{
printf("%d\n",tableau[i]);
}
return 0;
}
Le but de l'exercice est maintenant le suivant. On définit un étudiant par 3 données :
Ecrire un programme qui :
Quelques pistes pour faciliter la résolution :
Pour aller plus loin :