1. 考点:分治法
1.1 知识点概览
算法策略 —— 考点:算法策略概述(分治法)
- 特征:把一个问题拆分成多个小规模的相同子问题,一般用递归解决,也可以用循环。
- 经典问题:归并排序、快速排序、矩阵乘法、二分搜索、斐波那契数列、大整数乘法、汉诺塔。
- 关键词:一分为二、一一合二。
- 注意:不要陷入到递归调用的证明,直接调用下层即可。
算法策略 —— 考点:算法策略概述(分治法)
| 类别 | 排序方法 | 平均情况时间复杂度 | 特殊情况时间复杂度 | 空间复杂度(辅助存储) | 稳定性 |
|---|---|---|---|---|---|
| 插入排序 | 直接插入 | O(n2) | 基本有序最优 O(n) | O(1) | 稳定 |
| Shell 排序 | O(n1.3) | — | O(1) | 不稳定 | |
| 选择排序 | 直接选择 | O(n2) | — | O(1) | 不稳定 |
| 堆排序 | O(n log2 n) | — | O(1) | 不稳定 | |
| 交换排序 | 冒泡排序 | O(n2) | 基本有序最优 O(n) | O(1) | 稳定 |
| 快速排序 | O(n log2 n) | 基本有序最差 O(n2) | O(1) | 不稳定 | |
| 归并排序 | O(n log2 n) | — | O(n) | 稳定 | |
| 基数排序 | O(d(n + rd)) | — | O(rd) | 稳定 | |
排序算法 —— 其他类排序:基数排序(Radix Sort)
基本思想:
排序算法 —— 归并排序(Merge Sort)
基本思想: 归并也称为合并,是将两个或两个以上的有序子表合并成一个新的有序表。若将两个有序表合并成一个有序表,则称为二路合并。
算法特性:
排序算法 —— 交换类排序:冒泡排序(Bubble Sort)
基本思想: 通过相邻元素之间的比较和交换,将排序码较小的元素逐渐从底部移向顶部。由于整个排序的过程元素就像水底的气泡一样逐渐向上冒,因此称为冒泡算法。
算法特性:
排序算法 —— 选择类排序:直接选择排序(Straight Selection Sort)
基本思想: 首先在所有记录中选出排序码最小的记录,把它与第 1 个记录交换,然后在其余的记录内选出排序码最小的记录,与第 2 个记录交换……依次类推,直到所有记录排完为止。
算法特性:
排序算法 —— 插入类排序:直接插入排序(Straight Insertion Sort)
基本思想: 当插入第 i 个记录时,R1,R2,⋯,Ri−1 均已排好序。因此,将第 i 个记录 Ri 依次与 Ri−1,⋯,R2,R1 进行比较,找到合适的位置插入。它简单明了,但速度很慢。
算法特性:
排序算法 —— 基本概念与分类
排序的概念:
排序方法分类:
查找算法 —— 哈希表查找(Hash Table Search / 散列表查找)
查找算法 —— 二分查找(Binary Search / 折半查找)
基本思想(设 R[low,⋯,high] 是当前的查找区):
确定中点位置:mid=⌊(low+high)/2⌋。
关键字比较:将待查的 k 值与 R[mid].key 比较:
重复步骤:下一次查找是针对新的查找区间进行,重复步骤 (1) 和 (2)。
终止条件:在查找过程中,low 逐步增加,而 high 逐步减少。如果 high<low,则查找失败,算法结束。