std:: qsort
|
Definiert im 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 zur Darstellung* ) |
Sortiert das gegebene Array, auf das durch ptr gezeigt wird, in aufsteigender Reihenfolge. Das Array enthält count Elemente von size Bytes. Die Funktion, auf die durch comp gezeigt wird, wird für den Objektvergleich verwendet.
Wenn comp zwei Elemente als äquivalent kennzeichnet, 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.
Inhaltsverzeichnis |
Parameter
| ptr | - | Zeiger auf das zu sortierende Array |
| count | - | Anzahl der Elemente im Array |
| size | - | Größe jedes Elements im Array in Bytes |
| comp | - |
Vergleichsfunktion, die eine negative Ganzzahl zurückgibt, wenn das erste Argument
kleiner
als das zweite ist, eine positive Ganzzahl, wenn das erste Argument
größer
als das zweite ist, und null, wenn die Argumente äquivalent sind.
Die Signatur der Vergleichsfunktion sollte wie folgt lauten: int cmp ( const void * a, const void * b ) ; Die Funktion darf die übergebenen Objekte nicht modifizieren und muss konsistente Ergebnisse liefern, wenn sie für dieselben Objekte aufgerufen wird, unabhängig von deren Position im Array. |
Rückgabewert
(keine)
Hinweise
Trotz des Namens verlangen die C++, C und POSIX Standards nicht, dass diese Funktion mittels Quicksort implementiert wird oder geben irgendwelche Komplexitäts- oder Stabilitätsgarantien.
Die beiden Überladungen, die von der C++-Standardbibliothek bereitgestellt werden, sind unterschiedlich, weil die Typen des Parameters comp unterschiedlich sind ( Sprachbindung ist Teil seines Typs).
Beispiel
Der folgende Code sortiert ein Array von Ganzzahlen 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
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 405 | C++98 | die Elemente des Arrays konnten beliebigen Typ haben | beschränkt auf PODType |
Siehe auch
|
durchsucht ein Array nach einem Element unspezifizierten Typs
(Funktion) |
|
|
sortiert einen Bereich in aufsteigender Reihenfolge
(Funktions-Template) |
|
|
(C++11)
(deprecated in C++26)
|
prüft, ob ein Typ trivial ist
(Klassen-Template) |
|
C-Dokumentation
für
qsort
|
|