sort函数

前言

  • 排序算法需要通过随机访问迭代器来访问容器中的元素,因此有的容器就不支持排序算法。
  • STL容器的排序,支持随机访问的容器vector,deque,string没有sort成员,可调用std::sort排序;list排序调用自带的list::sort。
    • 注意
      std::sort 要求随机访问迭代器且不能用于 list 。此函数与 std::sort 的区别在于,它不要求 list 的元素类型可交换,保留所有迭代器的值,并进行稳定排序。
  • sort函数有以下特征:
    1. 要求输入一个范围[first, last)
    2. 随机迭代器,能用此算法的容器是支持随机访问的容器:vector, deque, string。
  • 对于list容器,list自带一个sort成员函数list::sort()。它和算法函数中的sort差不多,但是list::sort是基于指针的方式排序,也就是说,所有的数据移动和比较都是此用指针的方式实现,因此排序后的迭代器一直保持有效(vector中sort后的迭代器会失效)。

sort函数

  • 默认的为升序
  • 第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型(一般),它规定了什么样的关系
  • 排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。
  • 如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。
  • vector<int> v;

    sort(v.begin(), v.end(), greater<int>());

  • sort(a, a+n, cmp);
  • 对数组进行排序,其头文件为algorithm.h,形式为sort(数组名,数组名+数组长度),默认为升序,复杂度为nlog(n);
  • #include<functional>因为用了greater<int>()
  • sort(begin, end, less<数据类型>()),升序;
  • sort(begin, end, greater<数据类型>()),降序;
  • sort(数组名,数组名+数组长度,less<数组数据类型>()),升序;
  • sort(数组名,数组名+数组长度,greater<数组数据类型>()),降序。
------ The Happy Ending ------