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. Syntax
default (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); Parameter
first: 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 value
None 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
|