1. 查找
查找表是指由同一类型的数据元素(记录)构成的集合。
- 静态查找表:只进行查找操作
- 动态查找表:除了查找,还需要进行插入和删除操作
1.1 顺序查找
从表的一端开始,逐个将记录的关键字与给定值进行比较。
1.2 折半查找(二分查找)
要求查找表必须采用顺序存储结构,并且按关键字有序排列。
1.3 分块查找
将查找表分成若干块,块内元素可以无序,但块与块之间必须有序。
1.4 哈希表
哈希函数的构造方法
- 除留余数法:H(key) = key % p
处理冲突的方法
- 开放地址法:当冲突发生时,形成一个探测序列,沿此序列逐个地址探测,直到找到一个空位置
- 链地址法:将所有关键字为同义词的记录存储在一个单链表中
2. 排序
2.1 排序的基本概念
排序是将一组记录按照某个关键字的大小进行排列的过程。
2.2 简单排序
直接插入排序
将待排序的记录逐个插入到已排好序的有序序列中。
简单选择排序
每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排好序的记录序列的最后。
冒泡排序
重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
2.3 希尔排序
将待排序的记录分成若干子序列,分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。
2.4 快速排序
通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分继续进行排序。
2.5 堆排序
利用堆这种数据结构进行排序。堆是一个近似完全二叉树的结构,并同时满足堆积性质:即子结点的键值或索引总是小于(或大于)它的父节点。
2.6 归并排序(分治)
将两个或两个以上的有序表合并成一个新的有序表。
2.7 排序总结
| 排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 空间复杂度 | 稳定性 |
|---|---|---|---|---|
| 直接插入排序 | O(n²) | O(n²) | O(1) | 稳定 |
| 简单选择排序 | O(n²) | O(n²) | O(1) | 不稳定 |
| 冒泡排序 | O(n²) | O(n²) | O(1) | 稳定 |
| 希尔排序 | O(n^1.3) | O(n²) | O(1) | 不稳定 |
| 快速排序 | O(n log n) | O(n²) | O(log n) | 不稳定 |
| 堆排序 | O(n log n) | O(n log n) | O(1) | 不稳定 |
| 归并排序 | O(n log n) | O(n log n) | O(n) | 稳定 |
评论