1、查找
http://sjjp.tjuci.edu.cn/sjjg/datastructure/ds/web/chazhao/chazhao9.1.1.htm
查找表分为静态查找表 、动态查找表
静态查找表,查找过程中没有添加与删除,动态查找表超找过程中伴随着添加与删除记录的动作
最简单的查找, 顺序查找(或称为线性查找) O(n)
对于有序的线性表,有折半查找O(log n)、插值查找O(log n)、斐波那契查找O(log n).
对于动态变化的动态查找表,且其数据量较大时,我们使用另种查找方式:索引(就是把一个关键字与它对应的记录相关联的过程)
索引按照结构可以分为线性索引、树形索引、多级索引。
线性索引又分为:稠密索引、分块索引、倒排索引。
2 排序的分类
http://sjjp.tjuci.edu.cn/sjjg/datastructure/ds/web/chazhao/chazhao9.1.1.htm
1。按是否涉及数据的内、外存交换分
在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内部排序(简称内排序);
反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。
注意:
① 内排序适用于记录个数不很多的小文件
② 外排序则适用于记录个数太多,不能一次将其全部记录放人内存的大文件。
2。按策略划分内部排序方法
可以分为五类:交换排序、选择排序、插入排序、归并排序和分配排序。
交换排序:冒泡排序、快速排序
选择排序:直接选择排序( O(n2))、堆排序
插入排序:直接插入排序、折半插入排序、希尔排序
归并排序:
分派排序: 基数排序、箱排序
3。从算法的简单性来看,将常见的7种算法分为:
1 简单算法:冒泡排序、直接选择排序、直接插入排序
2 改进算法:快速排序、堆排序、希尔排序、归并排序
注意: 简单选择排序的时间复杂度是(O(n2)),上图有错。
4。关于排序方法的选择:
* (1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
* (2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
* (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的 排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先 利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的
注意:
散列技术:
散列技术是在记录的存储位置和关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。
存储位置=f(关键字),根据记录的关键字查找其对应的存储位置,而不需要比较关键字的记录。
对应关系f称为散列函数,又称为哈希函数。
采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。关键字对应的记录存储位置称为散列地址。
散列技术既是一种存储结构,也是一种查找结构,是面向查找的存储结构。
斐波那契数列: