Menu
Coddy logo textTech

Comparaison générique

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 52 sur 61.

Les fonctions génériques comme qsort et bsearch de la bibliothèque standard de C ont besoin d’un moyen de comparer les éléments sans connaître leurs types. La solution est une fonction de comparaison : une fonction que vous écrivez et que l’algorithme générique appelle chaque fois qu’il doit comparer deux éléments.

La signature standard des fonctions de comparaison est :

int compare(const void* a, const void* b);

Les deux paramètres sont const void* car la fonction générique ne sait pas quel type vous triez. La valeur de retour suit une convention spécifique :

Valeur de retourSignification
Négativea vient avant b
Zéroa est égal à b
Positivea vient après b

Dans votre fonction de comparaison, vous convertissez les pointeurs void* vers le type réel et comparez les valeurs. Voici comment comparer des entiers :

int compare_ints(const void* a, const void* b) {
    int val_a = *(const int*)a;
    int val_b = *(const int*)b;
    return val_a - val_b;
}

L’astuce de la soustraction fonctionne bien pour les entiers : si a est plus petit, le résultat est négatif ; s’ils sont égaux, il est nul ; s’il est plus grand, il est positif. Cette fonction peut maintenant être passée à qsort pour trier un tableau d’entiers dans l’ordre croissant.

challenge icon

Défi

Facile
Écrivez une fonction compare_ints qui compare deux entiers en suivant la convention standard des fonctions de comparaison utilisées par des algorithmes génériques comme qsort.

Votre fonction doit comparer les deux valeurs et renvoyer un résultat qui indique leur relation d’ordre.

Convention de valeur de retour :

  • Renvoyez une valeur négative si le premier entier précède le second (first < second)
  • Renvoyez zéro si les deux entiers sont égaux
  • Renvoyez une valeur positive si le premier entier suit le second (first > second)

Paramètres :

  • a (int) : Le premier entier à comparer
  • b (int) : Le second entier à comparer

Renvoie : Un entier indiquant l’ordre : négatif si a < b, zéro si a == b, positif si a > b.

Indice : L’astuce de la soustraction présentée dans la leçon fournit une solution élégante en une seule ligne.

Essayez vous-même

int compare_ints(int a, int b) {
    // Écrivez le code ici
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne