qsort

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu stdlib.h - Index


Header-Datei

stdlib.h

Kategorie

Routinen für Speicher- und String-Bearbeitung

Prototyp

void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

Beschreibung

Sortiert unter Verwendung des Quicksort-Algorithmus.

qsort ist eine Implementierung der "Mittelwert von drei"-Variante des Quicksort-Algorithmus. qsort sortiert die Einträge einer Tabelle und ruft dabei wiederholt die benutzerdefinierte Vergleichsfunktion auf, auf die fcmp zeigt.

  • base zeigt auf das Element 0 der zu sortierenden Tabelle.
  • Der Parameter nelem gibt die Anzahl der Elemente in der Tabelle an.
  • width gibt die Größe jedes Eintrags der Tabelle in Bytes an.

Die Vergleichsfunktion fcmp muss mit der Aufrufkonvention _USERENTRY deklariert werden.

  • fcmp akzeptiert die beiden Argumente elem1 und elem2; beide sind Zeiger auf einen Eintrag in der Tabelle. Die Vergleichsfunktion vergleicht die beiden Einträge, auf die *elem1 und *elem2 zeigen, und gibt einen vom Ergebnis dieses Vergleichs abhängigen Integerwert zurück.
  • *elem1 < *elem2'fcmp gibt einen Integerwert < 0 zurück
  • *elem1 == *elem2'fcmp gibt 0 zurück
  • *elem1 > *elem2'fcmp gibt einen Integerwert > 0 zurück

Für den Vergleich bedeutet das Symbol "Kleiner als" (<), dass das linke Element in der sortierten Folge vor dem rechten Element eingeordnet wird. Entsprechend bedeutet das Symbol "Größer als" (>), dass das linke Element in der sortierten Folge nach dem rechten Element eingeordnet wird.

Rückgabewert

Keiner.

Beispiel



 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 int sort_function( const void *a, const void *b);
 char list[5][4] = { "cat", "car", "cab", "cap", "can" };
 int main(void)
 {
    int  x;
    qsort((void *)list, 5, sizeof(list[0]), sort_function);
    for (x = 0; x < 5; x++)
       printf("%s\n", list[x]);
    return 0;
 }
 int sort_function( const void *a, const void *b)
 {
    return( strcmp((char *)a,(char *)b) );
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

+

+

+

+