头文件
#include<algorithm>
使用的是什么算法?
参考:C++一道深坑面试题:STL里sort算法用的是什么排序算法?_std lg-优快云博客
用到的是快速排序,但不完全是快速排序,还结合了插入排序和堆排序。
- 快速排序时间复杂度并不是稳定的O(nlogn),在排序表接近基本有序或逆序时,会退化成O(n^2)。
- 在数据量小的情况下,递归所造成的内存消耗不划算。
- 递归深度很大的情况下,空间消耗很大。
所以sort采取的排序方法如下:数据量大的情况下采取快速排序,当数据量小于某个阈值(16)的时候,采用插入排序,当递归深度过大的时候,采用堆排序。
用法
1.默认对一维数组升序排列
sort(&begin,&end); //sort(起始地址,末地址);
int a[n];
sort(a,a+n);//+n为元素个数,并非字节数
2.对一维数组降序排列
增加一个参数排序规则cmp,并编写这个排序规则cmp()。
bool cmp(int a,int b) //自定义一个排序函数
{
return a>b; //降序排列,如果改为return a<b,则为升序
}
int a[n];
sort(a,a+n,cmp);
3.对结构体排序
对cmp()函数稍加修改。
struct node //创建一个结构体代表每一个活动
{
int st,endd;//起止时间
}data[100];
bool cmp(node a, node b)
{
return a.endd < b.endd;//"<"就是升序排列;">"是降序排列
}
sort(data,data+n,cmp);//把所有活动按照结束时间进行升序排序
4.对vector排序
默认升序
vector<int> v;
sort(v.begin(),v.end());
使用cmp
bool cmp(int a,int b)
{
return a>b;
}
vector<int> v;
sort(v.begin(),v.end(),cmp);