编程基础篇 · 查找与排序

排序:冒泡和快排的赛跑

上一课说了,二分查找的门票是「先排好序」。那排序本身贵不贵?看你用什么套路。今天安排一场公开赛:同一组乱序数据,冒泡排序和快速排序同时开跑,谁先把柱子从矮到高排整齐谁赢。先看小数据,再上 60 根柱子——差距会让你印象深刻。

同场赛跑 · 冒泡 vs 快排

规则:两条泳道、同一组随机柱子、同样的动画节奏(每一步耗时相同),公平竞赛。留意三件事:①黄色 = 正在比较的柱子 ②紫色 = 快排选中的「基准」③绿色 = 已就位。先用 10 根感受节奏,再点 60 根看差距。

柱子数量 两道用同一组数据,点「开跑」发令

🫧 冒泡排序

相邻两根比较,大的慢慢往右冒 · O(n²) 0次比较

⚡️ 快速排序

选个基准劈两半,各自再劈 · 平均 O(n log n) 0次比较
怎么看这场比赛:冒泡永远只跟隔壁比、一格一格挪;快排每选一次基准,就把问题劈成两个更小的问题。10 根柱子时两边差不多,60 根时快排的比较次数只有冒泡的零头。
两种思想 · 各是什么套路

🫧 冒泡:蛮力逐个换 O(n²)

每一轮从头到尾扫一遍,相邻两个只要前面比后面大就交换——一轮下来,最大的那个必然「冒」到最右边。简单、直观、绝对不会写错,但 n 个数要扫 n 轮,总账就是 n²。上上课那条红色曲线,就是它的命。

⚡️ 快排:分而治之 O(n log n)

随手指定一根「基准」,比它矮的甩左边、比它高的甩右边——一趟下来基准就位,剩下两堆各自重复这个动作。「劈两半」是不是很眼熟?就是二分的亲戚。这个套路叫分治,下下课讲递归时它还会登场。

🪪 说句实话:没人手写排序

真实工程里,排序就是一行 list.sort(),语言内置的实现比你我手写的都好。那学这个干嘛?为了两种手感:一是看懂「为什么有的代码要跑一晚上」——多半是有人在百万级数据上用了 O(n²) 的套路;二是亲身体会 O(n²) 和 O(n log n) 到底差多少——上面那场赛跑,就是上上课两条曲线的真人版。尺子有了、手感有了,验收 AI 写的代码就有底气了。

下一课预告:排序在 AI 时代还有一个隐藏身份。RAG 检索回来一堆候选段落,谁排前面谁进上下文——这个「打分 + 重排」的过程叫 Rerank,是排序思想在大模型工程里的真身。下一课亲手当一次 Rerank 模型。

✅ 这一课想和你分享的