Sortieren in der C++ Standard Template Library(STL)
-
Verwendung der Funktion
sort()
zum Sortieren von Array oder STL-Containern in C++ - Sortieren des Arrays in absteigender Reihenfolge in C++
-
Verwendung der Funktion
partial_sort()
zum Sortieren eines Teils eines Arrays oder Vektors -
Benutzerdefinierte oder benutzerdefinierte Sortierung mit der Funktion
sort()
in C++ -
Verwendung der Methode
is_sorted()
in C++ - Zeitkomplexität von Sortieralgorithmen
In diesem Tutorial lernen wir eine weit verbreitete C++-Funktion namens sort()
kennen. Wir werden uns auch andere Funktionen ansehen, die mit dem Sortieren zusammenhängen.
Um Daten in C++ zu sortieren, schreiben wir unseren Algorithmus und wenden ihn auf Daten an, oder wir können die eingebaute Funktion sort()
verwenden, die in C++ STL vorhanden ist. Die Funktion sort()
ist in der Header-Datei algorithm
definiert.
Diese Funktion verwendet den IntroSort
-Algorithmus, einen hybriden Sortieralgorithmus, der die drei Sortieralgorithmen Quicksort, Heapsort und Insertionsort verwendet, um die Laufzeit zu minimieren.
Diese Funktion sortiert die Elemente des angegebenen Bereichs.
Syntax:
sort(start iterator, end iterator, compare_function)
Dies sortiert die Elemente in dem Bereich, der durch Start-Iterator und End-Iterator definiert ist, standardmäßig in aufsteigender Reihenfolge
(dies ist die Standard-compare_function).
Verwendung der Funktion sort()
zum Sortieren von Array oder STL-Containern in C++
Das Sortieren ist eine der grundlegenden Operationen, die an Daten durchgeführt wird. Wir ordnen Daten aufsteigend, absteigend oder benutzerdefiniert (benutzerdefinierte Sortierung) an.
Wir können ein Array oder STL-Container wie Vektor, Set, Map usw. in C++ mit der Funktion sort()
sortieren.
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0};
// array size
int n = sizeof(arr) / sizeof(arr[0]);
vector<int> v{35, 67, 11, -9, 7, -22}; // vector
cout << "The array after sorting is : \n";
sort(arr, arr + n);
sort(v.begin(), v.end()); // sorting vector
for (int i = 0; i < n; ++i) cout << arr[i] << " ";
cout << endl;
cout << "The vector after sorting is : \n";
for (int i = 0; i < v.size(); ++i) cout << v[i] << " ";
}
Ausgabe:
The array after sorting is :
0 1 2 3 4 5 6 7 8 9
The vector after sorting is :
-22 -9 7 11 35 67
Die Elemente sind standardmäßig in aufsteigender Reihenfolge angeordnet.
Sortieren des Arrays in absteigender Reihenfolge in C++
Um in C++ STL vorhandene Arrays oder Container in absteigender Reihenfolge zu sortieren, müssen wir einen dritten Parameter namens greater<type>()
in der Funktion sort()
übergeben. Diese Funktion führt einen Vergleich durch, sodass die Elemente am Ende in absteigender Reihenfolge sortiert werden.
Der Typ
bezieht sich auf den Typ des Arrays oder Containers, den wir verwenden, Int, Float oder String-Typ.
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0};
// array size
int n = sizeof(arr) / sizeof(arr[0]);
vector<int> v{35, 67, 11, -9, 7, -22}; // vector
cout << "The array after sorting is : \n";
sort(arr, arr + n, greater<int>());
sort(v.begin(), v.end(), greater<int>()); // sorting vector
for (int i = 0; i < n; ++i) cout << arr[i] << " ";
cout << endl;
cout << "The vector after sorting is : \n";
for (int i = 0; i < v.size(); ++i) cout << v[i] << " ";
}
Ausgabe:
The array after sorting is :
9 8 7 6 5 4 3 2 1 0
The vector after sorting is :
67 35 11 7 -9 -22
Verwendung der Funktion partial_sort()
zum Sortieren eines Teils eines Arrays oder Vektors
Wir können partial_sort()
verwenden, um nur einen Teil eines Arrays zu sortieren. Diese Methode ist nichts anderes als eine Variante
der ursprünglichen sort-Methode.
Syntax:
partial_sort(first, middle, last)
Es ordnet die Elemente im Bereich (first
, last
) neu an, so dass die Elemente vor der Mitte in aufsteigender Reihenfolge sortiert werden und die Elemente nach der Mitte ohne bestimmte Reihenfolge belassen werden.
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
vector<int> vr{35, 67, 11, -9, 7, -22}; // vector
cout << "The vector after partial sorting is : \n";
partial_sort(vr.begin(), vr.begin() + 2, vr.end());
for (int i = 0; i < vr.size(); ++i) cout << vr[i] << " ";
}
Ausgabe:
The vector after partial sorting is :
-22 -9 67 35 11 7
Wir können beobachten, dass nur die ersten beiden Elemente sortiert werden, die verbleibenden sind nur in einer zufälligen Reihenfolge vorhanden.
Benutzerdefinierte oder benutzerdefinierte Sortierung mit der Funktion sort()
in C++
Solange wir die Daten in aufsteigender oder absteigender Reihenfolge sortieren möchten, können wir diese Funktion verwenden, aber manchmal möchten wir, dass die Daten auf benutzerdefinierte Weise sortiert werden.
Hier müssen wir unsere benutzerdefinierte Sortierfunktion schreiben, die wir als dritten Parameter in der Funktion sort()
übergeben.
#include <algorithm>
#include <iostream>
using namespace std;
bool myfunction(string x, string y) { return x.size() < y.size(); }
int main() {
string str[] = {"a", "abc", "ba", "abcd"};
int n = 4;
sort(str, str + n); // normal sort function
cout << "Array after sorting : \n";
for (int i = 0; i < n; ++i) cout << str[i] << " ";
cout << endl;
sort(str, str + n, myfunction);
cout << "Array after user defined sorting : \n";
for (int i = 0; i < n; ++i) cout << str[i] << " ";
}
Ausgabe:
Array after sorting :
a abc abcd ba
Array after user defined sorting :
a ba abc abcd
Die erste Sortiermethode sortiert das Array von Zeichenfolgen standardmäßig in lexikografisch aufsteigender Reihenfolge. Die zweite Sortiermethode sortiert die Strings nach ihrer Länge, d.h. der Bedingung, die wir in unserer benutzerdefinierten Vergleichsfunktion namens myfunction
erwähnt haben.
Verwendung der Methode is_sorted()
in C++
Wenn wir überprüfen möchten, ob der angegebene Datenbereich sortiert ist oder nicht, können wir diese Methode verwenden.
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
vector<int> v{35, 67, 11, -9, 7, -22}; // vector
cout << is_sorted(v.begin(), v.end());
}
Ausgabe:
0
Da der Vektor nicht sortiert ist, erhalten wir als Ausgabe 0
, was false
bedeutet.
Zeitkomplexität von Sortieralgorithmen
sort()
hat eine Zeitkomplexität von O(NlogN)
, wobei N die Anzahl der Elemente ist, auf die die Funktion sort()
angewendet wird.