C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
C++ Algorithm sort()C++ Algorithm sort() function is used to sort the elements in the range [first, last) into ascending order. The elements are compared using operator < for the first version, and comp for the second version. Syntaxdefault (1) template <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last); custom (2) template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); Parameterfirst: An random access iterator pointing to the first element in the range to be sorted. last: An random access iterator pointing to the past last element in the range to be sorted. comp: A user-defined binary predicate function that accepts two arguments and returns true if the two arguments are in order and false otherwise. It follows the strict weak ordering to order the elements. Return valueNone ComplexityThe average of a sort complexity is N*log2 (N), where N = last - first. Data racesThe object in the range [first, last) are modified. ExceptionsThis function throws an exception if any of element comparisons, the element swaps or an operation on iterator throws an exception. Note: The invalid parameters cause an undefined behavior.Example 1Let's see the simple example to demonstrate the use of sort(): #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {3, 1, 4, 2, 5}; cout<<"Before sorting: "; for_each(v.begin(), v.end(), [](int x) { cout << x << " "; }); sort(v.begin(), v.end()); cout<<"\nAfter sorting: "; for_each(v.begin(), v.end(), [](int x) { cout << x << " "; }); return 0; } Output: Before sorting: 3 1 4 2 5 After sorting: 1 2 3 4 5 Example 2Let's see another simple example: #include <iostream> // std::cout #include <algorithm> // std::sort #include <vector> // std::vector using namespace std; bool myfunction (int i,int j) { return (i<j); } struct myclass { bool operator() (int i,int j) { return (i<j);} } myobject; int main () { int myints[] = {32,71,12,45,26,80,53,33}; vector<int> myvector (myints, myints+8); // 32 71 12 45 26 80 53 33 // using default comparison (operator <): sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33 // using function as comp sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80) // using object as comp sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80) // print out content: cout << "myvector contains:"; for (vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) cout << ' ' << *it; cout << '\n'; return 0; } Output: myvector contains: 12 26 32 33 45 53 71 80 Example 3Let's see another simple example: #include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; void print(const vector <std::string>& v) { vector <string>::const_iterator i; for(i = v.begin(); i != v.end(); i++) { cout << *i << " "; } cout << endl; } int main() { vector <string> v; // Push functional programming languages v.push_back("Lisp"); v.push_back("C#"); v.push_back("Java"); v.push_back("Python"); v.push_back("C++"); v.push_back("Pascal"); v.push_back("Sql"); // sort without predicate sort(v.begin(), v.end()); cout << "Sorted list of functional programming languages - " << endl; print(v); // sort with predicate sort(v.begin(), v.end(), std::greater<std::string>()); cout << "Reverse Sorted list of functional programming languages - " << endl; print(v); } Output: Sorted list of functional programming languages - C# C++ Java Lisp Pascal Python Sql Reverse Sorted list of functional programming languages - Sql Python Pascal Lisp Java C++ C# Example 4Let's see another simple example: #include <vector> #include <algorithm> #include <functional> #include <iostream> using namespace std; // return whether first element is greater than the second bool userdefgreater(int elem1, int elem2) { return elem1 > elem2; } int main() { vector <int> vec1; // container vector <int>::iterator Iter1; // iterator int k; for (k = 0; k <= 15; k++) vec1.push_back(k); random_shuffle(vec1.begin(), vec1.end()); cout <<"Original random shuffle vector vec1 data:\n"; for (Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout <<*Iter1<<" "; cout <<endl; sort(vec1.begin(), vec1.end()); cout <<"\nSorted vector vec1 data:\n"; for (Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout <<*Iter1<<" "; cout <<endl; // to sort in descending order, specify binary predicate sort(vec1.begin(), vec1.end(), greater<int>()); cout <<"\nRe sorted (greater) vector vec1 data:\n"; for (Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout <<*Iter1<<" "; cout <<endl; // a user-defined binary predicate can also be used sort(vec1.begin(), vec1.end(), userdefgreater); cout <<"\nUser defined re sorted vector vec1 data:\n"; for (Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout <<*Iter1<<" "; cout <<endl; return 0; } Output: Original random shuffle vector vec1 data: 4 10 11 15 14 5 13 1 6 9 3 7 8 2 0 12 Sorted vector vec1 data: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Re sorted (greater) vector vec1 data: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 User defined re sorted vector vec1 data: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Next TopicC++ Algorithm
|