6 分钟看懂 15 种排序算法
文章摘要
这是一段发布于 2013 年的经典可视化视频,在 6 分钟内连续演示了 15 种排序算法的运行过程,包括选择排序、插入排序、快速排序、归并排序、堆排序、希尔排序、冒泡排序、鸡尾酒排序、梳排序、地精排序、基数排序,乃至以效率极差著称的”猴子排序”(bogosort)等。视频最大的特色在于把每一次元素的比较和交换都映射成声音,配合柱状图的动态变化,形成了一种极具节奏感和”治愈感”的视听体验,因此多年来在程序员群体之外也广为流传,成为互联网上的常青内容。
视频通过柱状高低直观展示数组元素大小,排序过程中柱子不断重排,最终从乱序变为有序。不同算法表现出截然不同的”性格”:插入排序、冒泡排序呈现出渐进式的局部有序;快速排序和归并排序则以分治方式快速收敛;堆排序展现出独特的二叉堆结构调整过程;基数排序则按位分桶呈现出规律的分组重排。而 bogosort 则不断随机打乱数组直到碰巧有序,几乎永远跑不完,成为视频中的”彩蛋”和笑点。
这类可视化的教育价值在于:它把抽象的算法复杂度和操作模式变成了肉眼可见、耳朵可听的直观体验,帮助初学者建立对不同排序策略的感性认识。不过它也有局限——可视化中”一步”究竟如何定义(一次交换算一步还是拆成多次读写)会显著影响不同算法看起来的快慢,因此它更适合用于建立直觉,而非严格比较性能。
HN 评论精华
greggman65 表示自己在原视频发布一年后做了一个受其启发的可视化项目。他指出一个关键问题:什么算作”一个计算步骤”其实是模糊的——一次交换可以算作一步操作,也可以拆成四步(两次读取、两次写入)。而且早期硬件渲染这些可视化要慢得多。
ncruces 在自己的代码仓库中使用了另一套排序可视化。他指出步数统计方式的选择会掩盖真实的性能差异:例如使用”三数取中”和”九数取中”的快速排序变体,在可视化中看起来效率相近,但实际运行速度差别很大。尽管有这些局限,他认为可视化对于验证算法正确性仍然很有帮助。
solarkraft 称这是一段”经典视频”,其音效带来的满足感超越了软件社区的范围,并分享了某主播对它的反应视频,以及自己在技术活动上见到视频作者本人的经历。
inferiordev 幽默地评论说 bogosort”配乐最好听”,暗示其混乱的随机性产生了别有韵味的声音。borghives 则坦言自己真的在傻等 bogosort 跑完,说明他对这个臭名昭著的低效算法不太熟悉。其他简短评论也普遍称赞这段可视化”确定性的观感”和”莫名其妙的治愈感”。