06 排序算法-上:O(n^2) 三兄弟
李永乐式比喻:你手里有一堆乱序的扑克牌——
- 冒泡排序:从左到右,两两比较,大的往后换。就像水里的气泡,大的慢慢冒到右边。
- 选择排序:把整副牌扫一遍,找到最小的放第一张;再从剩下的牌里找最小的放第二张……每次选个最小的。
- 插入排序:就像打牌时整理手牌——新拿一张牌,插到手中已排好序的牌的正确位置。
三兄弟对比
性能对比(10,000 条数据)
| 算法 | 比较次数 | 交换次数 | 实际耗时 | 特点 |
|---|---|---|---|---|
| 冒泡排序 | ~5000 万次 | ~2500 万次 | ~2 秒 | 稳定、可提前终止 |
| 选择排序 | ~5000 万次 | 10000 次 | ~1.5 秒 | 不稳定、但交换最少 |
| 插入排序 | ~2500 万次 | ~2500 万次 | ~1 秒 | 稳定、近似有序时最快 |
AI 生成这三兄弟的代码只需 10~15 行 Python。重要的是理解趋势:数据量翻 10 倍,时间慢 100 倍。这就是 O(n^2) 的威力。
企业场景
- 冒泡:几乎不用(教学价值 > 实用价值)
- 选择:数据很小(< 1000)且交换成本高
- 插入:TimSort(Python/Java 内置排序)在数据近乎有序时用的就是插入排序!你每天用的
.sort()底层都包含它
AI 协作
AI 生成:
- 三种排序的 Python 实现 -- 各 5~10 行
- 生成不同数据规模(100/1000/10000)的耗时对比图
人类决策:
- 数据量 < 1000 且简单场景 -> 插入排序即可
- 数据量 > 10000 -> 用 O(n log n) 算法