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