![]() |
本支持页面包含《动画算法与数据结构》一书中创建的符号、动画和伪代码。有关详细解释,请参阅《动画算法与数据结构》书籍内容。
|
|
|
|
|
|
| 数据结构 | 时间复杂度 | 规则 | 用到的技术 | |
|---|---|---|---|---|
|
|
栈 |
|
后进先出 (LIFO: Last-In-First-Out) | |
|
|
队列 |
|
先进先出 (FIFO: First-In-First-Out) | |
|
|
优先队列 |
|
高优先级的数据先出 |
|
| 算法 | 时间复杂度 | 是否稳定 | 是否原地排序 | 用到的技术 | 特点 | |||
|---|---|---|---|---|---|---|---|---|
|
|
冒泡排序 |
|
〇 | 〇 |
|
× 不实用 | ||
|
|
选择排序 |
|
× | 〇 |
|
× 不实用 | ||
|
|
插入排序 |
|
〇 | 〇 |
|
〇对接近升序的数据是高效的 | ||
|
|
双向冒泡排序 |
|
〇 | 〇 |
|
〇对接近升序的数据是高效的 | ||
|
|
合并排序 |
|
〇 | × |
|
〇 稳定且高效 × 需要额外的内存 |
||
|
|
快速排序 |
|
× | 〇 |
|
× 基准选不好会导致低效 〇 原地排序且高效 |
||
|
|
堆排序 |
|
× | 〇 |
|
× 在某些系统下实际的速度会变慢 | ||
|
|
谢尔排序 |
|
× | 〇 |
|
× 间距选不好会导致低效 | ||
|
|
计数排序 |
|
〇 | × |
|
× 元素的值有上限限制 | ||
| 算法 | 时间复杂度 | 距离 | 用到的技术 | |
|---|---|---|---|---|
|
|
广度优先搜索 |
|
从一个起点到所有节点的最短路径 (边的数量) |
队列 |
|
|
迪杰斯特拉算法 (线性搜索) |
|
从一个起点到所有节点的最短路径 * 不能有负权边 |
|
|
|
迪杰斯特拉算法 |
|
从一个起点到所有节点的最短路径 * 不能有负权边 |
优先队列 |
|
|
贝尔曼-福特算法 |
|
从一个起点到所有节点的最短路径
* 可以有负权边 * 可检测出负环 |
|
|
|
Floyd-Warshall 算法 |
|
全节点对之间的最短路径
* 可以有负权边 * 可检测出负环 |
|
| 数据结构 | 时间复杂度 | 内存效率是否良好 | 是否有顺序 | 应用 | |
|---|---|---|---|---|---|
|
|
双向链表 |
|
〇 | 〇有顺序 | 列表、字典 |
|
|
哈希表 |
|
× | × | 字典 |
|
|
二叉查找树 |
|
〇 | 〇已排序 | 字典、集合、 优先队列、最大堆、最小堆 |
|
|
树堆 |
|
〇 | 〇已排序 | 字典、集合、 优先队列、最大堆、最小堆 |