排序基础
先懂手写排序的思想,再用比赛真正常用的 STL sort。配套动画:visualgo.net/en/sorting
一、五种排序速览
| 排序 | 思想 | 时间复杂度 |
|---|---|---|
| 冒泡 Bubble | 相邻比较,大的往后冒 | O(n²) |
| 选择 Selection | 每轮挑最小放前面 | O(n²) |
| 插入 Insertion | 像理扑克牌逐个插入 | O(n²) |
| 计数 Counting | 开桶数数 | O(n+值域) |
| 快速 Quick | 选基准分两半递归 | O(n log n) |
二、互动演示:冒泡排序一步步跑
数组 [5, 2, 4, 1, 3]。蓝色=正在比较,橙色=发生交换,绿色=已归位。
点击“下一步”,看相邻两个怎么比较、交换。
三、比赛实战:STL sort
#include <algorithm>
using namespace std;
int a[1005];
sort(a, a + n); // 升序
sort(a, a + n, greater<int>()); // 降序
// 结构体按字段排序
bool cmp(const Node& x, const Node& y) {
return x.score > y.score; // 按分数从高到低
}
sort(arr, arr + n, cmp);
sort 是 O(n log n),绝大多数题目直接用它。手写排序主要出现在阅读程序题。