std::qsort
| 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 zur Darstellung*) |
Sortiert das gegebene Array, auf das ptr zeigt, in aufsteigender Reihenfolge. Das Array enthält count Elemente von size Bytes. Die Funktion, auf die comp zeigt, 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.
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 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 der folgenden entsprechen:
Die Funktion darf die übergebenen Objekte nicht modifizieren und muss bei Aufruf für dieselben Objekte konsistente Ergebnisse zurückgeben, unabhängig von ihrer Position im Array. |
Rückgabewert
(kein)
Anmerkungen
Trotz des Namens verlangen die C++-, C- und POSIX-Standards nicht, dass diese Funktion mit Quicksort implementiert wird, und geben keine Garantien bezüglich Komplexität oder Stabilität.
Die beiden von der C++-Standardbibliothek bereitgestellten Überladungen sind unterschiedlich, da die Typen des Parameters comp unterschiedlich sind (Sprachverknüpfung 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 jeden Typ haben | eingeschränkt auf PODType |
Siehe auch
| durchsucht ein Array nach einem Element mit unspezifiziertem Typ (Funktion) | |
| sortiert einen Bereich von Elementen (Funktionstemplate & Algorithmus-Funktionsobjekt) | |
(C++20) |
|
(C++11)(veraltet in C++26) |
prüft, ob ein Typ trivial ist (Klassenvorlage) |
C-Dokumentation für qsort
| |