数据结构与算法 · 单步演示
把算法拆成一步一步,
看清每一次比较与交换
填入自己的数据,逐步前进或后退;右边的伪代码会亮起正在执行的那一行,变量表同步更新。17 个经典算法,全部在你的浏览器里算,不上传任何输入。
17个算法演示
5类数据结构
0字节上传
演示台 · 选一个算法开始
当前操作已就位
步 001 / 035初始数组。快速排序每次选区间最后一个数当基准,把比它小的挪到左边,再对两边分别递归。
键盘:← → 单步,空格 播放/暂停(先点一下演示区)。
伪代码 · 当前行高亮
快速排序(lo, hi):if lo ≥ hi:returnpivot ← a[hi];i ← lofor j ← lo … hi−1if a[j] < pivot:交换 a[i]、a[j];i ← i+1交换 a[i]、a[hi](基准归位)快速排序(lo, i−1);快速排序(i+1, hi)
变量
| 比较次数 | 0 |
|---|---|
| 交换/写入次数 | 0 |
01
全部演示
每个算法有单独一页:演示、复杂度、要点和常见错误。02 · 黑板速查
时间与空间复杂度一览
n 是元素个数;V、E 是图的顶点数和边数;h 是树高,w 是树最宽一层的结点数。每一项的来由写在对应算法页里。
| 算法 | 最好 | 平均 | 最坏 | 额外空间 | 稳定性 |
|---|---|---|---|---|---|
| 冒泡排序 | O(n) | O(n²) | O(n²) | O(1) | 稳定 |
| 插入排序 | O(n) | O(n²) | O(n²) | O(1) | 稳定 |
| 选择排序 | O(n²) | O(n²) | O(n²) | O(1) | 不稳定 |
| 归并排序 | O(n log n) | O(n log n) | O(n log n) | O(n) | 稳定 |
| 快速排序 | O(n log n) | O(n log n) | O(n²) | O(log n) 平均,O(n) 最坏 | 不稳定 |
| 堆排序 | O(n log n) | O(n log n) | O(n log n) | O(1) | 不稳定 |
| 顺序查找 | O(1) | O(n) | O(n) | O(1) | — |
| 二分查找 | O(1) | O(log n) | O(log n) | O(1) | — |
| 栈 | O(1) | O(1) | O(1) | O(n) | — |
| 队列(循环队列) | O(1) | O(1) | O(1) | O(n) | — |
| 前序遍历 | O(n) | O(n) | O(n) | O(h) | — |
| 中序遍历 | O(n) | O(n) | O(n) | O(h) | — |
| 后序遍历 | O(n) | O(n) | O(n) | O(h) | — |
| 层序遍历 | O(n) | O(n) | O(n) | O(w) | — |
| 广度优先搜索(BFS) | O(V + E) | O(V + E) | O(V + E) | O(V) | — |
| 深度优先搜索(DFS) | O(V + E) | O(V + E) | O(V + E) | O(V) | — |
| Dijkstra 最短路 | O(V²) | O(V²) | O(V²) | O(V) | — |
03
怎么用这个演示台
换成你的数据
在输入框里改数字、改树、改边,点「生成演示」。想看最坏情况,就专门构造一个最坏的输入。
单步对照伪代码
每按一次「下一步」,右侧亮起正在执行的那一行,变量表跟着变。洋红色标出的就是此刻正在比较或移动的元素。
数一数比较次数
变量表里有比较次数和交换次数。换几组不同规模、不同顺序的输入,对照复杂度一栏,量级是怎么来的就清楚了。