C++ sort()函数(重制版)

头文件

#include<algorithm>

使用的是什么算法?

参考:C++一道深坑面试题:STL里sort算法用的是什么排序算法?_std lg-CSDN博客

用到的是快速排序,但不完全是快速排序,还结合了插入排序和堆排序。

  • 快速排序时间复杂度并不是稳定的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);

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值