排序相关

有哪些存储结构

  • 随机存取,既可以随意直接存储任何一个元素,可以通过下表直接存取任何一个元素入数组等。
  • 顺序存储,就是只能从前往后逐个访问,像这种链表结构,不能直接通过下标访问,就必须从头开始访问,向后逐个搜索。
  • 索引存取是指为某个关键字建立索引表,从所有的表中得到地址,在直接访问。索引存储多用在数据管理过程中。
  • 散列存储时建立散列表,它相当于一种索引。

排序的稳定性

当待排序的关键字均不相同时,排序结果时唯一的,否则排序结果不唯一。若具有相同关键字的稳定性时针对所有输入的实例而言的,即在所有可能的输入实例中,只要有一个实例使得算法不满足稳定性要求,则该算法就是不稳定的。
稳定的排序入下表所示。

稳定的排序 时间复杂度 空间复杂度
气泡排序 最差/平均都是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)按是否设计数据的内、外存交换分
在排序过程中,若整个文件都放在内存中处理,排序时不涉及数据的内、外存交换,称之内部排序;反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。
注意:

  1. 内排序适用于记录个数不是很多的小文件;
  2. 外排序则适用于记录个数太多,不能一次将其全部记录放入内存的大文件;

(2)按照策略划分内部排序方法。
可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。

按照平均时间排序分为四类

(1)平方阶:直接插入排序、直接选择排序和冒泡排序。
(2)线性对数阶:快速、堆和归并排序。
(3)O(n^1+kc):希尔排序
(4)线性阶排序:桶排序、箱排序和基数排序。

简单排序中直接插入最好,快读排序最快,当文件为正序时,直接插入排序和冒泡排序均最佳。

快速排序时目前基于比较的内部排序中被认为时最好的犯法噶,宕待排序的关键字时随机分布时,快速排序的平均时间最短。

堆排序所需要的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。

hash记录表和位置表的对应方法

  1. 直接定址法
  2. 数字分析法
  3. 平方取中法
  4. 折叠法
  5. 取余法
  6. 随机数法

posted @ 2017-03-03 20:08  shugen  阅读(223)  评论(0编辑  收藏  举报