std::sort() C++ STL:ssä
Olemme keskustelleet qsort() C:ssä. C++ STL tarjoaa samanlaisen funktiolajittelun, joka lajittelee vektorin tai taulukon (kohteet, joilla on satunnaiskäyttö)
Yleensä tarvitaan kaksi parametria, joista ensimmäinen on taulukon/vektorin piste, josta lajittelun on aloitettava, ja toinen parametri on pituus, johon asti taulukon/vektorin halutaan lajitella. Kolmas parametri on valinnainen ja sitä voidaan käyttää esimerkiksi silloin, kun halutaan lajitella elementit leksikografisesti.
Oletuksena sort()-funktio lajittelee elementit nousevaan järjestykseen.
Alla on yksinkertainen ohjelma, joka näyttää sort(:n) toiminnan.
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; }> |
Lähtö
Array after sorting using default sort is : 0 1 2 3 4 5 6 7 8 9
Aika monimutkaisuus: O(N log N)
Aputila: O(1)
Kuinka lajitella laskevaan järjestykseen?
sort() ottaa kolmannen parametrin, jota käytetään määrittämään järjestys, jossa elementit lajitellaan. Voimme välittää suurempi()-funktion lajitellaksesi laskevaan järjestykseen. Tämä toiminto tekee vertailun tavalla, joka asettaa suuremmat elementit edelle.
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; }> |
Lähtö
Array after sorting : 9 8 7 6 5 4 3 2 1 0
Aika monimutkaisuus: O(N log N)
Aputila: O(1)
Lajittele matriisi vain annetulla alueella: Tällaisten ongelmien ratkaisemiseksi meidän on vain mainittava lajittelutoiminnon sisällä oleva alue.
Alla on yllä olevan tapauksen toteutus:
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> |
Lähtö
Array after sorting : 0 1 2 3 4 5 6 7 8 9
Aika monimutkaisuus: O(N log N)
Aputila: O(1)
Kuinka lajitella a tietty tilaus?
Voimme myös kirjoittaa oman vertailufunktiomme ja välittää sen kolmantena parametrina. Tämä vertailufunktio palauttaa arvon; muunnettavissa booliksi, joka pohjimmiltaan kertoo, tuleeko hyväksytty ensimmäinen argumentti sijoittaa ennen välitettyä toista argumenttia vai ei.
Esimerkiksi: Oletetaan, että alla olevassa koodissa välit {6,8} ja {1,9} välitetään argumentteina vertailuvälifunktiossa (vertailufunktio). Nyt 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; }> |
Lähtö
Intervals sorted by start time : [1,9] [2,4] [4,7] [6,8]
Kohteen std::sort() aika monimutkaisuus On:
- Paras tapaus – O (N log N)
- Keskimääräinen tapaus – O (N log N)
- Huonoin tapaus – O (N log N)
Tilan monimutkaisuus: Se voi käyttää O(log N)-aputilaa.
C++
#include> #include> using> namespace> std;> template> <> class> T>>> |
Lähtö
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
Aika monimutkaisuus: O(N log N)
Aputila: O(1)