qsort
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++ |
---|---|---|---|
+ |
+ |
+ |
+ |