logo

std::sort() C++ STL

Mes aptarėme qsort() C. C++ STL suteikia panašų funkcijų rūšiavimą, kuris rūšiuoja vektorių arba masyvą (elementai su atsitiktine prieiga)

Paprastai reikia dviejų parametrų: pirmasis yra masyvo / vektoriaus taškas, nuo kurio reikia pradėti rūšiavimą, o antrasis parametras yra ilgis, iki kurio norime rūšiuoti masyvą / vektorių. Trečiasis parametras yra neprivalomas ir gali būti naudojamas tokiais atvejais, kai norime rūšiuoti elementus leksikografiškai.



Pagal numatytuosius nustatymus funkcija sort() rūšiuoja elementus didėjančia tvarka.

Žemiau yra paprasta programa, rodanti, kaip veikia sort ().

CPP








// C++ program to demonstrate default behaviour of> // sort() in STL.> #include> using> namespace> std;> int> main()> {> >int> arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };> >int> n =>sizeof>(arr) />sizeof>(arr[0]);> >/*Here we take two parameters, the beginning of the> >array and the length n upto which we want the array to> >be sorted*/> >sort(arr, arr + n);> >cout <<>' Array after sorting using '> >'default sort is : '>;> >for> (>int> i = 0; i cout << arr[i] << ' '; return 0; }>

>

>

Išvestis

Array after sorting using default sort is : 0 1 2 3 4 5 6 7 8 9>

Laiko sudėtingumas: O (N log N)
Pagalbinė erdvė: O(1)

Kaip rūšiuoti mažėjančia tvarka?
sort() paima trečiąjį parametrą, kuris naudojamas norint nurodyti elementų rūšiavimo tvarką. Galime perduoti didesnę () funkciją, kad rūšiuotume mažėjančia tvarka. Ši funkcija atlieka palyginimą taip, kad didesni elementai būtų pateikti anksčiau.

CPP




// C++ program to demonstrate descending order sort using> // greater().> #include> using> namespace> std;> int> main()> {> >int> arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };> >int> n =>sizeof>(arr) />sizeof>(arr[0]);> >sort(arr, arr + n, greater<>int>>());> >cout <<>'Array after sorting : '>;> >for> (>int> i = 0; i cout << arr[i] << ' '; return 0; }>

>

>

Išvestis

Array after sorting : 9 8 7 6 5 4 3 2 1 0>

Laiko sudėtingumas: O (N log N)
Pagalbinė erdvė: O(1)

Rūšiuoti masyvą tik nurodytame diapazone: Norėdami išspręsti tokio tipo problemas, tereikia paminėti diapazoną rūšiavimo funkcijoje.
Žemiau pateikiamas pirmiau nurodyto atvejo įgyvendinimas:

C++




// C++ program to demonstrate sort()> #include> using> namespace> std;> int> main()> {> >int> arr[] = { 0, 1, 5, 8, 9, 6, 7, 3, 4, 2 };> >int> n =>sizeof>(arr) />sizeof>(arr[0]);> >// Sort the elements which lies in the range of 2 to> >// (n-1)> >sort(arr + 2, arr + n);> >cout <<>'Array after sorting : '>;> >for> (>int> i = 0; i cout << arr[i] << ' '; return 0; } // This code is contributed by Suruchi Kumari>

>

>

Išvestis

Array after sorting : 0 1 2 3 4 5 6 7 8 9>

Laiko sudėtingumas: O (N log N)

Pagalbinė erdvė: O(1)

Kaip rūšiuoti a konkrecia tvarka?
Taip pat galime parašyti savo lyginamąją funkciją ir perduoti ją kaip trečiąjį parametrą. Ši lyginamoji funkcija grąžina reikšmę; konvertuojamas į bool, kuris iš esmės nurodo, ar pirmasis argumentas turi būti pateiktas prieš antrąjį argumentą, ar ne.
Pavyzdžiui, toliau pateiktame kode tarkime, kad intervalai {6,8} ir {1,9} perduodami kaip argumentai funkcijoje „ComparatorInterval“ (palyginamoji funkcija). Dabar kaip i1.first (=6)

CPP




// A C++ program to demonstrate> // STL sort() using> // our own comparator> #include> using> namespace> std;> // An interval has a start> // time and end time> struct> Interval {> >int> start, end;> };> // Compares two intervals> // according to starting times.> bool> compareInterval(Interval i1, Interval i2)> {> >return> (i1.start } int main() { Interval arr[] = { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } }; int n = sizeof(arr) / sizeof(arr[0]); // sort the intervals in increasing order of // start time sort(arr, arr + n, compareInterval); cout << 'Intervals sorted by start time : '; for (int i = 0; i cout << '[' << arr[i].start << ',' << arr[i].end << '] '; return 0; }>

>

>

Išvestis

Intervals sorted by start time : [1,9] [2,4] [4,7] [6,8]>

std::sort() laiko sudėtingumas yra:

mylivecricket.in
  1. Geriausias atvejis – O (N log N)
  2. Vidutinis atvejis – O (N log N)
  3. Blogiausias atvejis – O (N log N)

Erdvės sudėtingumas: Jis gali naudoti O (log N) pagalbinę erdvę.

C++




#include> #include> using> namespace> std;> template> <>class> T>>> Comparator {>// we pass an object of this class as> >// third arg to sort function...> public>:> >bool> operator()(T x1, T x2)> >{> >return> x1 } }; template bool funComparator(T x1, T x2) { // grąžinimo tipas yra bool return x1<= x2; } void show(int a[], int array_size) { for (int i = 0; i cout << a[i] << ' '; } } int main() { int a[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 }; int asize = sizeof(a) / sizeof(int); cout << 'The array before sorting is : '; show(a, asize); cout << endl << 'The array after sorting is(asc) :'; sort(a, a + asize); show(a, asize); cout << endl << 'The array after sorting is(desc) :'; sort(a, a + asize, greater ()); parodyti(a, asize); cout<< endl << 'The array after sorting is(asc but our ' 'comparator class) :'; sort(a, a + asize, Comparator ()); parodyti(a, asize); cout<< endl << 'The array after sorting is(asc but our ' 'comparator function) :'; sort(a, a + asize, funComparator ); parodyti(a, asize); grąžinti 0; }>

>

>

Išvestis

The array before sorting is : 1 5 8 9 6 7 3 4 2 0 The array after sorting is(asc) :0 1 2 3 4 5 6 7 8 9 The array after sorting is(desc) :9 8 7 6 5 4 3 2 1 0 The array after sorting is(asc but our comparator class) :0 1 2 3 4 5 6 7 8 9 The array after sorting is(asc but our comparator function) :0 1 2 3 4 5 6 7 8 9>

Laiko sudėtingumas: O (N log N)
Pagalbinė erdvė: O(1)