小明打扑克时,习惯把牌一张张拿起来插入手中已排好的牌中。比如手上的牌是 [3, 7, 9],新拿到一张 5,他就把 5 插到 3 和 7 之间 → [3, 5, 7, 9]。
这就是"插入排序"——你打牌时一直在用的算法!
而计数排序的思路完全不同。如果老师要对全班成绩排序,她可以这样:
第一步:统计每个分数(0~100)有几个人
第二步:从低分往高分,按统计数依次输出
不需要比较任何两个学生谁高谁低,纯粹靠统计计数就排好了!
计数排序 = 不比较大小,靠"数数"来排序!
💡 两种排序的本质区别
插入排序(比较排序):通过比较元素大小来决定位置,逐个插入到已排序部分。
计数排序(非比较排序):不比较元素,通过统计每个值出现次数来确定位置。
比较排序的下界是 O(n log n),而计数排序可以突破这个下界,达到 O(n+k)!