qsort(3)

BEZEICHNUNG
qsort, qsort_r - ein Feld sortieren

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <stdlib.h>

void qsort(size_t n, size_t groesse;
           void basis[n * groesse], size_t n, size_t groesse,
           typeof(int (const void [groesse], const void [groesse]))
               *vergleich);
void qsort_r(size_t n, size_t groesse;
           void basis[n * groesse], size_t n, size_t groesse,
           typeof(int (const void [groesse], const void [groesse], void *))
               *vergleich,
           void *argument);

    Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

qsort_r():
    _GNU_SOURCE

BESCHREIBUNG
Die Funktion qsort() sortiert ein Feld mit n 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 vergleich 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.

ATTRIBUTE
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-Sicher

STANDARDS

qsort()
    C11, POSIX.1-2008.

GESCHICHTE

qsort()
    POSIX.1-2001, C89, SVr4, 4.3BSD.

qsort_r()
    Glibc 2.8.

ANMERKUNGEN
Um C-Zeichenketten zu vergleichen, rufen Sie strcmp(3) auf, wie es im folgenden Beispiel gezeigt wird.

BEISPIELE
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, "Usage: %s <string>…\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);
    }

SIEHE AUCH
sort(1), alphasort(3), strcmp(3), versionsort(3)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net>, Chris Leick <c.leick@vollbio.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 (debian-l10n-german@lists.debian.org).