数据结构与算法演示台SUANFA.NET.CN · STEP BY STEP

数据结构与算法 · 单步演示

把算法拆成一步一步,
看清每一次比较交换

填入自己的数据,逐步前进或后退;右边的伪代码会亮起正在执行的那一行,变量表同步更新。17 个经典算法,全部在你的浏览器里算,不上传任何输入。

17个算法演示
5类数据结构
0字节上传

演示台 · 选一个算法开始

快速排序详解 →

1 到 16 个整数(−99 到 999),用逗号或空格隔开。 输入只在你的浏览器里计算,不会上传。

380
121
712
53
444
265
906
177

当前操作已就位

步 001 / 035初始数组。快速排序每次选区间最后一个数当基准,把比它小的挪到左边,再对两边分别递归。

键盘: 单步,空格 播放/暂停(先点一下演示区)。

伪代码 · 当前行高亮

  1. 快速排序(lo, hi):
  2. if lo ≥ hi:return
  3. pivot ← a[hi];i ← lo
  4. for j ← lo … hi−1
  5. if a[j] < pivot:交换 a[i]、a[j];i ← i+1
  6. 交换 a[i]、a[hi](基准归位)
  7. 快速排序(lo, i−1);快速排序(i+1, hi)

变量

比较次数0
交换/写入次数0
01

全部演示

每个算法有单独一页:演示、复杂度、要点和常见错误。

排序

六种排序逐次比较、逐次交换,看清谁和谁比、为什么要换。

查找

顺序查找一个个看,二分查找每次砍掉一半。

栈与队列

后进先出与先进先出,顺带看循环队列怎样绕回开头。

二叉树遍历

前序、中序、后序靠递归,层序靠队列;调用栈同步可见。

广度优先、深度优先,以及带权图上的 Dijkstra 最短路。

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

怎么用这个演示台

  1. 换成你的数据

    在输入框里改数字、改树、改边,点「生成演示」。想看最坏情况,就专门构造一个最坏的输入。

  2. 单步对照伪代码

    每按一次「下一步」,右侧亮起正在执行的那一行,变量表跟着变。洋红色标出的就是此刻正在比较或移动的元素。

  3. 数一数比较次数

    变量表里有比较次数和交换次数。换几组不同规模、不同顺序的输入,对照复杂度一栏,量级是怎么来的就清楚了。