Namespaces
Variants

std::qsort

Aus de.cppreference.net
 
 
Algorithmenbibliothek
Eingeschränkte Algorithmen und Algorithmen auf Bereichen (C++20)
Eingeschränkte Algorithmen, z.B. ranges::copy, ranges::sort, ...
Nicht modifizierende Sequenzoperationen    
Stapeloperationen
(C++17)
Suchoperationen
Modifizierende Sequenzoperationen
Kopieroperationen
(C++11)
(C++11)
Tauschoperationen
Transformationsoperationen
Erzeugungsoperationen
Entfernungsoperationen
Reihenfolgeändernde Operationen
(bis C++17)(C++11)
(C++20)(C++20)
Stichprobenoperationen
(C++17)

Sortier- und verwandte Operationen
Partitionierungsoperationen
(C++11)    

Sortieroperationen
Binäre Suchoperationen
(auf partitionierten Bereichen)
Mengenoperationen (auf sortierten Bereichen)
Mischoperationen (auf sortierten Bereichen)
Heap-Operationen
Minimum-/Maximumoperationen
(C++11)
(C++17)
Lexikografische Vergleichsoperationen
Permutationsoperationen


 
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:

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

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++11)(veraltet in C++26)
prüft, ob ein Typ trivial ist
(Klassenvorlage)
C-Dokumentation für qsort