免费算法可视化工具
观看排序、路径查找和经典算法的实现 — 冒泡/快速/归并排序,Dijkstra/A*/BFS 在交互式迷宫网格上,加上二分查找、埃拉托斯特尼筛法、N 皇后问题和生命游戏。逐步动画、同步伪代码、实时指标和并排竞速模式。支持移动设备,完全在您的浏览器中运行。
工作原理
每种算法都写成生成器,每次产出一个可视化“步骤”——数组快照以及哪些元素被比较、交换或写入。一个播放器预先计算完整的步骤列表,因此播放、暂停、前进一步、后退一步以及并排比赛模式都只是对该列表进行索引。不会发送任何内容——一切都在你的浏览器中运行。
- 1选择算法和数据集可选择冒泡、选择、插入、归并、快速、堆、希尔、鸡尾酒、计数和基数排序(还有用来娱乐的 bogosort)。生成随机、接近有序、逆序或少量唯一值的数组,或输入你自己的逗号分隔数字。
- 2观看运行过程——同步阅读柱条按正在发生的操作着色(比较、交换、枢轴、已排序)。伪代码面板高亮正在执行的那一行,实时计数器跟踪比较、交换、写入和数组访问次数。
- 3控制时间调整速度、拖动时间轴,或单步前进和后退,仔细研究算法如何做出每个决定。后退是精确的,因为每一步都是存储的快照,而不是重新运行。
- 4让算法同台竞速比赛模式在同一输入上同时并排运行两种或更多算法,并附有指标表,让你看到例如快速排序为什么比冒泡排序快。
完全在你的浏览器中运行——数据不会离开你的设备。没有服务器、不上传、无需账号。这是一个教学工具:算法采用教科书式实现,以便清晰地可视化。
指南
操作示例
打开“排序”标签页。在“自定义数字或单词”中输入 5, 3, 8, 1,然后点击“应用”。页面显示“大小:4”,四根带标签的柱子取代了原来的 40 根随机柱子。“冒泡排序”已选中,“时间轴”显示 1/14。点击“播放”。运行结束后,时间轴显示 14/14,柱子依次为 1、3、5、8,并显示为“已排序”的颜色,计数器显示比较 6、交换 4、写入 8、访问 12。现在用同样的数据点击“选择排序”。它需要 18 步,比较仍为 6,但交换只有 2,因为选择排序每一轮最多交换一次。输入 banana, apple, cherry 并点击“应用”,就可以对单词排序。“分享此次运行”会复制一个链接,打开后会回到这个算法、这组数据和你当前所在的步骤。“保存图片(PNG)”会保存当前画面,例如保存为 bubble-sort-step-14.png。
使用哪些设置,以及限制
- 先选算法,再选初始形态。 “排序”标签页包含冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序、鸡尾酒排序、计数排序和基数排序(LSD)。“添加 Bogosort(供娱乐)”会再添加第十一个。形态按钮有“随机”“几乎已排序”“已反转”和“少数唯一值”。“大小”滑块范围为 2 到 120,在电脑上默认 40,在手机上默认 15,“随机换一组”会生成新数据。切换算法时数据保持不变,因此可以公平地比较各次运行。
- 了解播放控制。 可使用“播放”/“暂停”、“后退一步”、“前进一步”和“重新开始”,也可以把“时间轴”拖到任意一步。“速度”以每秒步数计,范围为 1 到 240,在电脑上默认 30,在手机上默认 20。由于整个运行过程会先算好,所以后退是精确的。快捷键有:空格键、左右方向键、R,以及用于调速的 [ 和 ];焦点在按钮、滑块或文本框上时这些快捷键无效。第一次运行会自动开始一次,切换标签页时播放会暂停。
- 输入你自己的数字或单词。 “自定义数字或单词”至少需要两项,用逗号或空格分隔。数字会四舍五入为整数。只要有一项不是数字,所有项都会被当作单词并按字母顺序排序。只使用前 120 项,项数不超过 30 时柱子上会显示标签。计数排序会为最小值和最大值之间的每个值各开一个位置,所以像 1, 50000000 这样的列表会要求它开 5000 万个位置。使用该算法时,请让数字保持在较小的范围内。
- 既要看动画,也要看计数器。 面板显示比较、交换、写入、访问、步骤和计算时间,数值累计到你当前所在的步骤。计数排序和基数排序不做比较,所以对它们会隐藏该项。“计算时间”是这个浏览器算出各步骤所用的时间,并不是对算法的速度测试。“工作量如何随规模增长”下的“测量增长”会在 10、25、50、100、250 和 500 个元素的随机数组上运行除 Bogosort 外的所有排序算法,“下载结果(CSV)”会保存 sorting-growth.csv。
- 让算法竞速,并分享你的发现。 “竞速模式”可让你选择 2 到 4 种算法,在同一组数据上以相同的步速运行。总步数最少的最先完成,并获得奖杯标记,点击“返回单个视图”即可返回。步数不是秒数,所以这显示的是每种方法的工作量,而不是它在你的电脑上跑得多快。Bogosort 不能参加竞速。在竞速模式之外,“分享此次运行”会复制一个链接,打开后停在同一步并处于暂停状态。
- 切换标签页,查看路径查找和经典算法。 “路径查找”包含广度优先搜索、Dijkstra、A* 搜索、贪心最佳优先、双向 BFS 和深度优先搜索,在 16 行 30 列的网格上运行,手机上为 18 行 13 列。拖动可绘制墙壁,也可以拖动绿色起点或红色目标。在“权重”模式下,一个格子的代价为 5;只有 Dijkstra 和 A* 会使用权重。“经典”包含二分查找、线性查找、埃拉托斯特尼筛法(n 为 20 到 120)、N 皇后(N 为 4 到 10)、生命游戏和 Fisher–Yates 洗牌(大小为 8 到 60)。
常见问题及解决方法
- 提示“请至少输入两个数字或单词,用逗号分隔。”
- 自定义框中识别到的项少于两项。只有一个数字、框为空,或只有逗号和空格,都会触发这条提示,同时输入框会出现红色边框。再添加第二项,然后点击“应用”或按 Enter。尽管提示里只提到逗号,空格也可以作为分隔符。像 5 3 x 这样的文本不算错误:它会被读作三个单词。
- 提示“Bogosort 是阶乘时间复杂度,所以限制在 7 个元素 — 更多的元素实际上可能永远运行下去。”
- 你用“添加 Bogosort(供娱乐)”添加了 Bogosort 并选中了它。它会随机洗牌,直到列表碰巧排好序,所以“大小”滑块最大只能到 7;如果数据更多,会被削减到 7 个,自定义列表则只保留前 7 项。选择其他算法即可回到最大 120 的大小。
- 提示“无路径 — 目标被墙壁包围。”
- 在“路径查找”标签页中,当运行结束时仍未到达目标,就会出现这条提示,原因是墙壁把目标或起点围住了。“随机墙壁”有可能偶然造成这种情况。请把目标或起点拖到空位上,或点击“清除墙壁”(它同时会清除权重)。“清除路径”只会把运行倒回到第一步,并保留你的墙壁。
- “分享此次运行”按钮变成了“复制失败”。
- 浏览器阻止了剪贴板,这可能发生在嵌入的框架中,或没有权限的情况下。链接通常也会放进地址栏,所以你可以从那里复制。该链接仅适用于“排序”标签页,其中包含算法、最多 120 项数据和步骤编号。“路径查找”和“经典”的运行无法用这种方式分享。
- 动画没有开始,或者自己停了。
- 第一次运行只会自动开始一次;如果你的设备要求减少动态效果,则完全不会自动开始,所以请点击“播放”。标签页被隐藏时播放也会暂停,并在最后一步停止;在那时点击“播放”会从第一步重新开始。焦点在按钮、滑块或文本框上时,键盘快捷键不起作用,所以请先点击页面的空白处。
对比分析
用它来弄清楚某个算法为什么会那样运行:你可以前进和后退,观察伪代码的当前行,并在相同的数据上比较计数。它不是基准测试。计数来自本工具对每种算法的逐步实现,而不是你所用编程语言中的排序函数;计算时间只衡量浏览器准备这些步骤所花的时间。它包含 10 种排序算法(加上 Bogosort 为 11 种)、6 种路径查找算法和 6 种经典算法,但你不能粘贴自己的代码、加载真实地图,也不能对超过 120 项的数据排序。所有内容都在你的浏览器中运行,不会向任何地方发送任何数据。