TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

C++ algorithm sort() function

C++ algorithm sort() function with c++ tutorial for beginners and professionals with examples on adjacent_find(),any_of(), copy(), copy_if(), count(), count_if(), equal(), find(), find_end(), find_first_of(), find_if(), find_if_not(), for_each() etc.

<< Back to CPP

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

Complexity

The average of a sort complexity is N*log2 (N), where N = last - first.

Data races

The object in the range [first, last) are modified.

Exceptions

This 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 1

Let'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 2

Let'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 3

Let'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 4

Let'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




Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf