函数声明

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

最新文章

  1. php 面向对象中的魔术方法
  2. 哎哟,我的.NET呀
  3. jQuery获取页面及个元素高度、宽度【转】
  4. noip2014普及组 比例简化
  5. ASP.NET MVC4 学习系统三(控制器Controller)
  6. 10个实用的PHP正则表达式
  7. Atmospheric Scattering in Unity5
  8. 数据切分——Atlas读写分离Mysql集群的搭建
  9. 10.26最后的模拟DAY2 改造二叉树[中序遍历+严格递增的最长不下降子序列]
  10. OpenGL ES 详解纹理生成和纹理映射步骤以及函数
  11. MyEclipse下安装MyBatis Generator代码反向生成工具
  12. Android为TV端助力 http下载视频到指定目录
  13. Python全栈之路----函数进阶----列表生成式
  14. 一文了解JAVA虚拟机的重要组成
  15. TortoiseGit的使用
  16. crond 的注意点
  17. 学习Zookeeper之第1章Zookeeper入门
  18. [Training Video - 6] [File Reading] [Groovy] Reading Properties file
  19. WCF如何使用X509证书 z
  20. 基于ansj_seg和nlp-lang的简单nlp工具类

热门文章

  1. 驱动开发:内核枚举LoadImage映像回调
  2. 齐博x1会员中心如何加标签
  3. 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2022)-SGCL-DTI:用于DTI预测的监督图协同对比学习
  4. Codeforces Round #816 (Div. 2)/CodeForces1715
  5. .Net Core中获取appsettings.json中的节点数据
  6. MessagePack 和System.Text.Json 序列号 反序列化对比
  7. 如何重启kafka
  8. 为什么Linux需要虚拟内存 [转载好文]
  9. C++快速幂
  10. 关于js更改编码问题