查找表 (Search Table)是由同一类型的数据元素〈或记录)构成的集合。

关键字 (Key) 是数据元素中某个数据项的值 ,又称为键值,用它可以标识一个数据元素。也可以标识一个记录的某个数据项(字段) ,我们称为关键码,

若此关键字可以唯一地标识一个记录,则称此关键字为主关键字 (Primary Key)。注意这也就意味着,对不同的记录,其主关键宇均不相同。主关键字所在的数据项称为主关键码,

那么对于那些可以识别多个数据元素(或记录)的关键字,我们称为次关键字 (Secondary Key)。

次关键字也可以理解为是不以唯一标识一个数据元素(或记录)的关键字,它对应的数据项就是次关键码。

动态查找表**(**Dynamic Search Table):在查找过程中同时插入查找表中不存在的数据元素 , 或者从查找表中删除已经存在的某个数据元素。

动态查找表的操作就两个:

  • 查找时插入数据元素
  • 查找时删除数据元素

为了提高查找的效率 ,我们需要专门为查找操作设置数据结构,这种面向查找操作的数据结构称为查找结构

从逻辑上来说,查找所基于的数据结构是集合,集合中的记录之间没有本质关系。可是要想获得较高的查找性能,我们就不能不改变数据元素之间的关系,在存储时可以将查找集合组织成表、树等结构。

顺序表查找

顺序查找 (Sequential Search) 又叫线性查找,是最基本的查找技术, 它的查找过程是:从表中第一个(或最后一个)记录开始 , 逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功 , 找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功 。

查找算法

查找算法 平均时间复杂度 空间复杂度 查找条件
顺序查找 O(n) O(1) 无序或有序
二分查找(折半查找) O(logn) O(1) 有序
插值查找 O(log(logn)) O(1) 有序
斐波那契查找 O(logn) O(1) 有序
哈希查找 O(1) O(n) 无序或有序
二叉查找树(二叉搜索树查找) O(logn)
红黑树 O(logn)
2-3树 O(logn - logn)
B树/B+树 O(logn)