std::qsort
| Definiert in Header <cstdlib> |
||
| void qsort( void *ptr, std::size_t count, std::size_t size, /* c-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) | |
| Sortiert einen Bereich aufsteigend (Funktionstemplate) | |
| (C++11)(veraltet in C++26) |
prüft, ob ein Typ trivial ist (Klassenvorlage) |
| C-Dokumentation für qsort
| |