排序相关
有哪些存储结构
- 随机存取,既可以随意直接存储任何一个元素,可以通过下表直接存取任何一个元素入数组等。
- 顺序存储,就是只能从前往后逐个访问,像这种链表结构,不能直接通过下标访问,就必须从头开始访问,向后逐个搜索。
- 索引存取是指为某个关键字建立索引表,从所有的表中得到地址,在直接访问。索引存储多用在数据管理过程中。
- 散列存储时建立散列表,它相当于一种索引。
排序的稳定性
当待排序的关键字均不相同时,排序结果时唯一的,否则排序结果不唯一。若具有相同关键字的稳定性时针对所有输入的实例而言的,即在所有可能的输入实例中,只要有一个实例使得算法不满足稳定性要求,则该算法就是不稳定的。
稳定的排序入下表所示。
稳定的排序 | 时间复杂度 | 空间复杂度 |
---|---|---|
气泡排序 | 最差/平均都是O(n^2),最好时O(n) | 1 |
鸡尾酒排序 | 最差/平均都是O(n^2),最好时O(n) | 1 |
插入排序 | 最差/平均都是O(n^2),最好时O(n) | 1 |
归并排序 | 最差/平均/最好都是O(nlogn) | O(n) |
桶排序 | O(n) | O(k) |
基数排序 | O(dn) | O(n) |
二叉树排序 | O(n log n) | O(n) |
图书排序 | O(n log n) | (1+kc)n |
不稳定的排序如下表所示:
不稳定的排序 | 时间复杂度 | 空间复杂度 |
---|---|---|
选择排序 | 最差平均都是O(n^2) | 1 |
希尔排序 | O(n log n) | 1 |
堆排序 | 最差/平均/最好都是O(n log n) | 1 |
快速排序 | 平均时O(n log n),最坏是O(n^2) | O(log n) |
排序方法的分类
(1)按是否设计数据的内、外存交换分
在排序过程中,若整个文件都放在内存中处理,排序时不涉及数据的内、外存交换,称之内部排序;反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。
注意:
- 内排序适用于记录个数不是很多的小文件;
- 外排序则适用于记录个数太多,不能一次将其全部记录放入内存的大文件;
(2)按照策略划分内部排序方法。
可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。
按照平均时间排序分为四类
(1)平方阶:直接插入排序、直接选择排序和冒泡排序。
(2)线性对数阶:快速、堆和归并排序。
(3)O(n^1+kc):希尔排序
(4)线性阶排序:桶排序、箱排序和基数排序。
简单排序中直接插入最好,快读排序最快,当文件为正序时,直接插入排序和冒泡排序均最佳。
快速排序时目前基于比较的内部排序中被认为时最好的犯法噶,宕待排序的关键字时随机分布时,快速排序的平均时间最短。
堆排序所需要的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
hash记录表和位置表的对应方法
- 直接定址法
- 数字分析法
- 平方取中法
- 折叠法
- 取余法
- 随机数法