概念
在编程竞赛或工程实践中,排序都是高频考点。掌握不同场景下的最优解法,能显著提升代码效率。下面结合 C++ 标准库和手写实现,梳理一下常见的排序策略。
常见排序类型
- 普通升降序排列
- 自定义规则排序
- 特定元素查找(如第 k 大)
注:本文示例均基于 C++ 语言。
学习路径建议
- 常规任务:优先使用 STL 中的
sort函数,覆盖 90% 的场景。 - 求逆序对:归并排序是经典解法。
- 找第 k 大/小:快速选择算法(
nth_element)效率更高。 - 数据范围极小:考虑计数排序等线性时间复杂度方案。
sort 排序
原理与模板
std::sort 默认采用混合排序(Introsort),综合了快速排序、堆排序和插入排序的优势。通过传入比较函数,可以灵活控制排序逻辑。
#include <bits/stdc++.h>
using namespace std;
int main() {
// 定义数组并读取数据
vector<int> a(10);
for(int i = 0; i < 10; i++) scanf("%d", &a[i]);
// 核心排序:默认升序
sort(a.begin(), a.end());
// 若需降序,可传入 greater<int>()
// sort(a.begin(), a.end(), greater<int>());
for(int x : a) printf("%d ", x);
return 0;
}
注意:如果直接对空 vector 进行 scanf 写入会导致越界,务必先 或指定大小。


