目录 · 17 个演示
全部算法演示
按数据结构分成五类。每一页都能改输入、单步走,并附复杂度、要点和常见错误。
01
排序
六种排序逐次比较、逐次交换,看清谁和谁比、为什么要换。| 演示 | 一句话 | 平均 | 最坏 | 空间 | 稳定性 |
|---|---|---|---|---|---|
| 冒泡排序 | 反复比较相邻的两个数,前大后小就交换。 | O(n²) | O(n²) | O(1) | 稳定 |
| 插入排序 | 把数组分成左边有序、右边待处理两段。 | O(n²) | O(n²) | O(1) | 稳定 |
| 选择排序 | 每一轮在还没排好的部分里找出最小值,和这一段最前面的数交换。 | O(n²) | O(n²) | O(1) | 不稳定 |
| 归并排序 | 先把数组一直对半拆,拆到每段只剩一个数;再把相邻的两段有序段合并:每次比较两段的头,把小的那个写回原数组。 | O(n log n) | O(n log n) | O(n) | 稳定 |
| 快速排序 | 选一个基准(这里取区间最后一个数),把比它小的都挪到左边,基准放到中间,然后对左右两段分别做同样的事。 | O(n log n) | O(n²) | O(log n) 平均,O(n) 最坏 | 不稳定 |
| 堆排序 | 把数组看成一棵完全二叉树,先整理成大顶堆(每个结点都不小于孩子),堆顶就是最大值;把它换到末尾,堆缩小一格,再让新的堆顶往下沉,重复到堆里只剩一个数。 | O(n log n) | O(n log n) | O(1) | 不稳定 |
02
查找
顺序查找一个个看,二分查找每次砍掉一半。03
栈与队列
后进先出与先进先出,顺带看循环队列怎样绕回开头。04
二叉树遍历
前序、中序、后序靠递归,层序靠队列;调用栈同步可见。05
图
广度优先、深度优先,以及带权图上的 Dijkstra 最短路。| 演示 | 一句话 | 平均 | 最坏 | 空间 | 稳定性 |
|---|---|---|---|---|---|
| 广度优先搜索(BFS) | 从起点出发,先访问所有距离为 1 的顶点,再访问距离为 2 的,一圈一圈往外扩。 | O(V + E) | O(V + E) | O(V) | — |
| 深度优先搜索(DFS) | 从起点出发,沿着一个没访问过的邻居一直往深处走,走到没路了就退回上一个顶点,换下一个邻居继续。 | O(V + E) | O(V + E) | O(V) | — |
| Dijkstra 最短路 | 求一个起点到其余各顶点的最短距离。 | O(V²) | O(V²) | O(V) | — |