[C++]std::sort()函数使用总结
2024-10-21 03:32:11
函数声明
template< class RandomIt, class Compare >
constexpr void sort( RandomIt first, RandomIt last, Compare comp );
以一定排序规则排序指定范围内的元素,但是算法不具有稳定性,如果元素的值是相同的话不保证它们的相对顺序保持不变。
参数说明
first , last - 要排序的元素范围。
comp - 比较的函数,这里要满足compare的要求,如下:
总结下来一句话:就是在compare(int a ,int b)中,如果你想要从小到大排列,那么你需要的是 return a<b;(这里很简单,如果记不住的话,先随便按照一个方向写,最后发现反了的话改下大小于符号就行)
时间复杂度
平均 O(N·log(N)) 次比较,其中 N = std::distance(first, last) 。
我们需要注意的是sort()采用的是优化版本的快速排序,在最后阶段采用直接插入排序。因此时间复杂度为O(N·log(N))
举例说明
#include <algorithm>
#include <functional>
#include <array>
#include <iostream>
int main()
{
std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
// 用默认的 operator< 排序
std::sort(s.begin(), s.end());
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n';
// 用标准库比较函数对象排序
std::sort(s.begin(), s.end(), std::greater<int>());
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n';
// 用自定义函数对象排序
struct {
bool operator()(int a, int b) const
{
return a < b;
}
} customLess;
std::sort(s.begin(), s.end(), customLess);
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n';
// 用 lambda 表达式排序
std::sort(s.begin(), s.end(), [](int a, int b) {
return b < a;
});
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n';
}
最新文章
- php 面向对象中的魔术方法
- 哎哟,我的.NET呀
- jQuery获取页面及个元素高度、宽度【转】
- noip2014普及组 比例简化
- ASP.NET MVC4 学习系统三(控制器Controller)
- 10个实用的PHP正则表达式
- Atmospheric Scattering in Unity5
- 数据切分——Atlas读写分离Mysql集群的搭建
- 10.26最后的模拟DAY2 改造二叉树[中序遍历+严格递增的最长不下降子序列]
- OpenGL ES 详解纹理生成和纹理映射步骤以及函数
- MyEclipse下安装MyBatis Generator代码反向生成工具
- Android为TV端助力 http下载视频到指定目录
- Python全栈之路----函数进阶----列表生成式
- 一文了解JAVA虚拟机的重要组成
- TortoiseGit的使用
- crond 的注意点
- 学习Zookeeper之第1章Zookeeper入门
- [Training Video - 6] [File Reading] [Groovy] Reading Properties file
- WCF如何使用X509证书 z
- 基于ansj_seg和nlp-lang的简单nlp工具类
热门文章
- 驱动开发:内核枚举LoadImage映像回调
- 齐博x1会员中心如何加标签
- 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2022)-SGCL-DTI:用于DTI预测的监督图协同对比学习
- Codeforces Round #816 (Div. 2)/CodeForces1715
- .Net Core中获取appsettings.json中的节点数据
- MessagePack 和System.Text.Json 序列号 反序列化对比
- 如何重启kafka
- 为什么Linux需要虚拟内存 [转载好文]
- C++快速幂
- 关于js更改编码问题