Namensräume
Varianten
Aktionen

std::qsort

Von cppreference.com
< cpp‎ | algorithm
 
 
Algorithmenbibliothek
Beschränkte Algorithmen und Algorithmen für Bereiche (C++20)
Beschränkte Algorithmen, z.B. ranges::copy, ranges::sort, ...
Ausführungsrichtlinien (C++17)
Nicht-modifizierende Sequenzoperationen
Stapeloperationen
(C++17)
Suchoperationen
(C++11)                (C++11)(C++11)

Modifizierende Sequenzoperationen
Kopieroperationen
(C++11)
(C++11)
Tauschoperationen
Transformationsoperationen
Generierungsoperationen
Entfernungsoperationen
Ordnungsändernde Operationen
(bis C++17)(C++11)
(C++20)(C++20)
Stichprobenoperationen
(C++17)

Sortier- und verwandte Operationen
Partitionierungsoperationen
Sortieroperationen
Binäre Suchoperationen
(auf partitionierten Bereichen)
Mengenoperationen (auf sortierten Bereichen)
Zusammenführungsoperationen (auf sortierten Bereichen)
Heapoperationen
Minimum/Maximum-Operationen
(C++11)
(C++17)
Lexikographische Vergleichsoperationen
Permutationsoperationen
C-Bibliothek
qsort
Numerische Operationen
Operationen auf uninitialisiertem Speicher
 
Definiert in Header <cstdlib>
void qsort( void *ptr, std::size_t count,

            std::size_t size, /* c-compare-pred */* comp );
void qsort( void *ptr, std::size_t count,

            std::size_t size, /* compare-pred */* comp );
(1)
extern "C" using /* c-compare-pred */ = int(const void*, const void*);
extern "C++" using /* compare-pred */ = int(const void*, const void*);
(2) (nur Exposition*)

Sortiert das durch ptr zeigende Array aufsteigend. Das Array enthält count Elemente von je size Bytes. Die Funktion, auf die comp zeigt, wird für den Objektvergleich verwendet.

Wenn comp zwei Elemente als äquivalent einstuft, ist ihre Reihenfolge nicht spezifiziert.

Wenn der Typ der Elemente des Arrays kein PODType(bis C++11)TriviallyCopyable Typ(seit C++11) ist, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Parameter

ptr - Zeiger auf das zu sortierende Array
zählt - Anzahl der Elemente im Array
size - Größe jedes Elements im Array in Bytes
comp - Vergleichsfunktion, die einen negativen ganzzahligen Wert zurückgibt, wenn das erste Argument *kleiner* als das zweite ist, einen positiven ganzzahligen Wert, wenn das erste Argument *größer* als das zweite ist, und null, wenn die Argumente äquivalent sind.

Die Signatur der Vergleichsfunktion sollte äquivalent zu Folgendem sein

 int cmp(const void *a, const void *b);

Die Funktion darf die ihr übergebenen Objekte nicht ändern und muss konsistente Ergebnisse zurückgeben, wenn sie für dieselben Objekte aufgerufen wird, unabhängig von ihrer Position im Array.

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Anmerkungen

Trotz des Namens sind die Standards C++, C und POSIX nicht verpflichtet, diese Funktion mit Quicksort zu implementieren oder Komplexitäts- oder Stabilitätsgarantien zu geben.

Die beiden vom C++-Standardbibliothek bereitgestellten Überladungen sind unterschiedlich, da die Typen des Parameters comp unterschiedlich sind (die Sprachverknüpfung ist Teil seines Typs).

[bearbeiten] Beispiel

Der folgende Code sortiert ein Array von ganzen Zahlen mit qsort()

#include <array>
#include <climits>
#include <compare>
#include <cstdlib>
#include <iostream>
 
int main()
{
    std::array a{-2, 99, 0, -743, INT_MAX, 2, INT_MIN, 4};
 
    std::qsort
    (
        a.data(),
        a.size(),
        sizeof(decltype(a)::value_type),
        [](const void* x, const void* y)
        {
            const int arg1 = *static_cast<const int*>(x);
            const int arg2 = *static_cast<const int*>(y);
            const auto cmp = arg1 <=> arg2;
            if (cmp < 0)
                return -1;
            if (cmp > 0)
                return 1;
            return 0;
        }
    );
 
    for (int ai : a)
        std::cout << ai << ' ';
    std::cout << '\n';
}

Ausgabe

-2147483648 -743 -2 0 2 4 99 2147483647

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 405 C++98 die Elemente des Arrays könnten jeden Typ haben beschränkt auf PODType

[bearbeiten] Siehe auch

sucht ein Array nach einem Element unbekannten Typs ab
(Funktion) [editieren]
Sortiert einen Bereich aufsteigend
(Funktionstemplate) [edit]
(C++11)(veraltet in C++26)
prüft, ob ein Typ trivial ist
(Klassenvorlage) [bearbeiten]
C-Dokumentation für qsort