Menu
Coddy logo textTech

Generisches Vergleichen

Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 52 von 61.

Generische Funktionen wie qsort und bsearch in der Standardbibliothek von C benötigen eine Möglichkeit, Elemente zu vergleichen, ohne ihre Typen zu kennen. Die Lösung ist eine Vergleichsfunktion: eine von dir geschriebene Funktion, die der generische Algorithmus immer dann aufruft, wenn er zwei Elemente vergleichen muss.

Die Standardsignatur für Vergleichsfunktionen lautet:

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

Beide Parameter sind const void*, da die generische Funktion nicht weiß, welchen Typ du sortierst. Der Rückgabewert folgt einer bestimmten Konvention:

RückgabewertBedeutung
Negativa kommt vor b
Nulla ist gleich b
Positiva kommt nach b

In deiner Vergleichsfunktion wandelst du die void*-Zeiger in den tatsächlichen Typ um und vergleichst die Werte. So vergleichst du Ganzzahlen:

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;
}

Der Subtraktionstrick funktioniert gut für Ganzzahlen: Wenn a kleiner ist, ist das Ergebnis negativ; wenn es gleich ist, null; wenn es größer ist, positiv. Diese Funktion kann nun an qsort übergeben werden, um ein Ganzzahlen-Array in aufsteigender Reihenfolge zu sortieren.

challenge icon

Aufgabe

Einfach
Schreibe eine Funktion compare_ints, die zwei Ganzzahlen gemäß der standardmäßigen Konvention für Vergleichsfunktionen vergleicht, die von generischen Algorithmen wie qsort verwendet wird.

Deine Funktion sollte die beiden Werte vergleichen und ein Ergebnis zurückgeben, das ihre Reihenfolge angibt.

Konvention für Rückgabewerte:

  • Gib einen negativen Wert zurück, wenn die erste Ganzzahl vor der zweiten kommt (first < second)
  • Gib null zurück, wenn beide Ganzzahlen gleich sind
  • Gib einen positiven Wert zurück, wenn die erste Ganzzahl nach der zweiten kommt (first > second)

Parameter:

  • a (int): Die erste zu vergleichende Ganzzahl
  • b (int): Die zweite zu vergleichende Ganzzahl

Rückgabe: Eine Ganzzahl, die die Reihenfolge angibt: negativ, wenn a < b, null, wenn a == b, positiv, wenn a > b.

Hinweis: Der Subtraktionstrick aus der Lektion ermöglicht eine elegante einzeilige Lösung.

Probier es selbst

int compare_ints(int a, int b) {
    // Schreibe hier Code
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler