qsort, qsort_r - ein Feld sortieren
Standard-C-Bibliothek (
libc,
-lc)
#include <stdlib.h>
void qsort(void basis[.groesse * .nmemb], size_t nmemb, size_t groesse,
int (*vergleich)(const void [.groesse], const void [.groesse]));
void qsort_r(void basis[.groesse * .nmemb], size_t nmemb, size_t groesse,
int (*vergleich)(const void [.groesse], const void [.groesse], void *),
void *argument);
qsort_r():
_GNU_SOURCE
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.
Die Funktionen
qsort() und
qsort_r() geben keinen Wert
zurück.
qsort_r() wurde zur Glibc 2.8 hinzugefügt.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
qsort(), qsort_r() |
Multithread-Fähigkeit |
MT-Safe |
qsort(): POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
Um C-Zeichenketten zu vergleichen, rufen Sie
strcmp(3) auf, wie es im
folgenden Beispiel gezeigt wird.
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(*(const char **) p1, *(const char **) p2);
}
int
main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "Aufruf: %s <Zeichenkette>…\n", argv[0]);
exit(EXIT_FAILURE);
}
qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);
for (size_t j = 1; j < argc; j++)
puts(argv[j]);
exit(EXIT_SUCCESS);
}
sort(1),
alphasort(3),
strcmp(3),
versionsort(3)
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<
[email protected]>, Chris Leick <
[email protected]> und Mario
Blättermann <
[email protected]> 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 die
Mailingliste
der Übersetzer