Einführung
Sortieren ist eine grundlegende Operation in der Programmierung, bei der Elemente in einer bestimmten Reihenfolge angeordnet werden. Diese Elemente können Teil einer Sequenz, eines Arrays oder einer anderen Datenstruktur sein. In C++ bietet die Standardbibliothek die eingebaute Funktion std::sort(), die Sortiervorgänge mit beeindruckender Effizienz vereinfacht.
In diesem aktualisierten Tutorial lernen Sie die Verwendung, Varianten und Besonderheiten der Funktion std::sort() in C++ kennen. Los geht's!
Passende Infrastruktur bei centron
Zum Ausprobieren braucht es keine eigene Hardware: ccloud³ VMs mit vollem Root-Zugriff gibt es ab 3,12 € im Monat, stundengenau abgerechnet und in Sekunden bereit. Cloud Server mieten →
Was ist std::sort()?
Die Funktion std::sort() ist ein leistungsstarkes Werkzeug der C++-Standardbibliothek, definiert im Header <algorithm>. Sie ermöglicht das Sortieren von Datenstrukturen wie Arrays und Vektoren in aufsteigender oder absteigender Reihenfolge und bietet die Möglichkeit, benutzerdefinierte Sortierkriterien festzulegen.
Syntax
void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);first: Iterator, der auf das erste Element des zu sortierenden Bereichs zeigt.last: Iterator, der auf das Ende des zu sortierenden Bereichs zeigt (einen Platz nach dem letzten Element).comp(optional): Eine Vergleichsfunktion oder ein Funktionsobjekt, das die Sortierreihenfolge definiert. Wird dieser Parameter weggelassen, werden die Elemente standardmäßig in aufsteigender Reihenfolge mitstd::less<>()sortiert.
Sortieren mit std::sort()
1. Sortieren in aufsteigender Reihenfolge (Standardverhalten)
Standardmäßig ordnet std::sort() Elemente in aufsteigender Reihenfolge an, wenn der Parameter comp nicht angegeben ist.
Beispiel:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int demo[5] = {5, 4, 3, 2, 1};
int len = sizeof(demo) / sizeof(demo[0]);
cout << "Before sorting: ";
for (int i = 0; i < len; i++) cout << demo[i] << " ";
std::sort(demo, demo + len); // Default ascending sort
cout << "\nAfter sorting: ";
for (int i = 0; i < len; i++) cout << demo[i] << " ";
return 0;
}
Output:
Before sorting: 5 4 3 2 1
After sorting: 1 2 3 4 5
2. Sortieren in absteigender Reihenfolge
Um in absteigender Reihenfolge zu sortieren, geben Sie einen Comparator wie std::greater<int>() als dritten Parameter an.
Beispiel:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int demo[5] = {44, 22, 55, 33, 66};
int len = sizeof(demo) / sizeof(demo[0]);
cout << "Before sorting: ";
for (int i = 0; i < len; i++) cout << demo[i] << " ";
std::sort(demo, demo + len, greater<int>()); // Descending sort
cout << "\nAfter sorting: ";
for (int i = 0; i < len; i++) cout << demo[i] << " ";
return 0;
}
Output:
Before sorting: 44 22 55 33 66
After sorting: 66 55 44 33 22Alternativ können Sie eine Lambda-Funktion für eine benutzerdefinierte absteigende Sortierung verwenden:
std::sort(demo, demo + len, [](int a, int b) { return a > b; });3. Sortieren mit benutzerdefinierter Reihenfolge
Der Parameter comp erlaubt es, eigene Sortierlogiken zu definieren. Zum Beispiel können Sie Elemente basierend auf ihren Resten bei der Division durch 10 sortieren.
Beispiel:
#include <iostream>
#include <algorithm>
using namespace std;
bool customSort(int a, int b) {
return (a % 10) < (b % 10);
}
int main() {
int demo[5] = {18, 45, 34, 92, 21};
int len = sizeof(demo) / sizeof(demo[0]);
cout << "Vor dem Sortieren: ";
for (int i = 0; i < len; i++) cout << demo[i] << " ";
std::sort(demo, demo + len, customSort); // Sortieren nach Resten bei Division durch 10
cout << "\nNach dem Sortieren: ";
for (int i = 0; i < len; i++) cout << demo[i] << " ";
return 0;
}
Output:
Before sorting: 18 45 34 92 21
After sorting: 21 92 34 45 18Komplexität von std::sort()
Die Zeitkomplexität von std::sort() beträgt O(Nlog(N)) im Durchschnitts- und Worst-Case, was es zu einer sehr effizienten Methode für große Datensätze macht.
Tipps und Best Practices
-
- Verwenden Sie geeignete Iteratoren: Übergeben Sie
std::sort()immer Random-Access-Iteratoren (z. B. für Arrays oder Vektoren). - Nutzen Sie Lambda-Funktionen für benutzerdefinierte Sortierungen: Lambda-Funktionen sind oft klarer und prägnanter als separate Vergleichsfunktionen.
- Optimieren Sie die Lesbarkeit: Verwenden Sie aussagekräftige Namen für benutzerdefinierte Comparator-Funktionen oder Lambdas, um die Sortierlogik zu verdeutlichen.
- Sortieren Sie andere Container:
std::sort()funktioniert auch mit anderen Containern wiestd::vectoroderstd::deque.
Beispiel: Sortieren eines
std::vector: - Verwenden Sie geeignete Iteratoren: Übergeben Sie
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = {3, 1, 4, 1, 5};
std::sort(vec.begin(), vec.end()); // Ascending sort
cout << "Sorted vector: ";
for (int v : vec) cout << v << " ";
return 0;
}
Zusammenfassung
Die Funktion std::sort() in C++ ist ein vielseitiges und effizientes Werkzeug zum Sortieren von Datenstrukturen. Sie unterstützt:
- Standardmäßiges Sortieren in aufsteigender Reihenfolge.
- Benutzerdefinierte Sortierungen mit vorgefertigten Comparatoren wie
std::greater<int>(). - Eigene Sortierlogiken durch Vergleichsfunktionen oder Lambdas.
Mit einer Zeitkomplexität von O(Nlog(N)) ist std::sort() hochoptimiert und zuverlässig für die meisten Anwendungen. Experimentieren Sie mit verschiedenen Containern und Sortierkriterien, um dieses essenzielle Werkzeug zu meistern!
Testen Sie Ihr Setup auf ccloud³
Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.