BEZEICHNUNG¶
qsort, qsort_r - ein Feld sortieren
ÜBERSICHT¶
#include <stdlib.h>
void qsort(void *basis, size_t nmemb, size_t groesse,
int (*vergleich)(const void *, const void *));
void qsort_r(void *basis, size_t nmemb, size_t groesse,
int (*vergleich)(const void *, const void *, void *),
void *argument);
Mit Glibc erforderliche Makros (siehe
feature_test_macros(7)):
qsort_r(): _GNU_SOURCE
BESCHREIBUNG¶
Die Funktion
qsort() sortiert ein Feld mit
nmemb Elementen der
Größe
groesse. Das Argument
basis zeigt auf den Anfang
des Feldes.
Die Inhalte des Feldes werden in aufsteigender Reihenfolge sortiert, bezogen auf
eine Vergleichsfunktion, auf die
vergleich zeigt. Diese wird mit zwei
Argumenten aufgerufen, die auf die zu vergleichenden Objekte zeigen.
Die Vergleichsfunktion muss eine Ganzzahl zurückgeben, die kleiner, gleich
oder größer Null ist, je nachdem, ob das erste Argument kleiner,
gleich oder größer als das zweite ist. Wenn zwei Inhalte des Feldes
gleich sind, ist ihre Reihenfolge unbestimmt.
Die Funktion
qsort_r() ist mit
qsort() identisch, außer, dass
die Vergleichsfunktion
compar ein drittes Argument entgegennimmt. An
die Vergleichsfunktion wird ein Zeiger per
argument übergeben. Auf
diese Weise benötigt die Vergleichsfunktion keine globalen Variablen, um
beliebige Argumente weiterzureichen und ist daher ablaufinvariant und sicher
für die Verwendung in Threads.
RÜCKGABEWERT¶
Die Funktionen
qsort() und
qsort_r() geben keinen Wert
zurück.
VERSIONEN¶
qsort_r() wurde Glibc in Version 2.8 hinzugefügt.
Die Funktion
qsort() ist konform mit SVr4, 4.3BSD, C89 und C99.
ANMERKUNGEN¶
Bibliotheksroutinen, die als Argument
vergleich für
qsort()
brauchbar sind, schließen
alphasort(3) und
versionsort(3)
ein. Um C-Zeichenketten zu vergleichen, rufen Sie
strcmp(3) auf, wie es
im folgenden Beispiel gezeigt wird.
BEISPIEL¶
Ein Beispiel für den Gebrauch finden Sie unter
bsearch(3).
Ein weiteres Beispiel ist das folgende Programm, das Zeichenketten sortiert, die
als Befehlszeilen-Argumente übergebenen werden:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int
cmpstringp(const void *p1, const void *p2)
{
/* Die tatsächlichen Argumente dieser Funktion sind »Zeiger auf
Zeiger auf char«, strcmp(3)-Argumente sind aber »Zeiger auf
char«, daher wird im Folgenden umgewandelt und zurückverfolgt*/
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
int
main(int argc, char *argv[])
{
int j;
if (argc < 2) {
fprintf(stderr, "Aufruf: %s <Zeichenkette>...\n", argv[0]);
exit(EXIT_FAILURE);
}
qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);
for (j = 1; j < argc; j++)
puts(argv[j]);
exit(EXIT_SUCCESS);
}
SIEHE AUCH¶
sort(1),
alphasort(3),
strcmp(3),
versionsort(3)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
gemeldet werden können, finden sich unter
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<krd@gulu.net> und Chris Leick <c.leick@vollbio.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public
License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird
KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.