C++ 算法 中的 sort函数

首页 / C++入门教程 / C++ 算法 中的 sort函数

C++算法 sort()函数用于将[first,last)参数内的元素按升序排序。

sort - 语法

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);

sort - 参数

first:一个随机访问迭代器,指向要排序参数内的第一个元素。

last:一个随机访问迭代器,它指向要排序参数内的最后一个最后一个元素。

comp :用户定义的二进制谓词函数,该函数接受两个参数,如果两个参数顺序正确,则返回true,否则返回false。它遵循严格的弱排序来对元素进行排序。

sort - 返回值

没有

sort - 例子1

让我们看一个简单的示例来演示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;
}

输出:

Before sorting: 3 1 4 2 5 
After sorting:  1 2 3 4 5

sort - 例子2

让我们看另一个简单的例子:

#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;
}

输出:

myvector contains: 12 26 32 33 45 53 71 80

sort - 例子3

让我们看另一个简单的例子:

#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);
}

输出:

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#  

sort - 例子4

让我们看另一个简单的例子:

#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;
}

输出:

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

SQL必知必会 -〔陈旸〕

黄勇的OKR实战笔记 -〔黄勇〕

即时消息技术剖析与实战 -〔袁武林〕

分布式协议与算法实战 -〔韩健〕

系统性能调优必知必会 -〔陶辉〕

软件设计之美 -〔郑晔〕

Linux内核技术实战课 -〔邵亚方〕

深入剖析Java新特性 -〔范学雷〕

互联网人的数字化企业生存指南 -〔沈欣〕

好记忆不如烂笔头。留下您的足迹吧 :)