查找:就是根据给定的某个值在查找表中确定一个其关键字等于给定值的数据元素或记录
查找表是由同一类型的数据元素或记录构成的集合
关键字是数据元素中某个数据项的值又称为键值。
可以唯一地标识一个记录的称为主关键字,可以识别多个数据元素的关键字称为次关键字。
查找表按照操作方式来分有两大种:静态查找表和动态查找表
静态查找表主要操作有查询和检索某个特定的数据元素
动态查找表在查找过程同时增/删表中不存在/存在的某个数据元素
顺序查找又叫线性查找,是最基本的查找技术,它从表中第一个记录或者是最后一个记录开始逐个进行记录的关键字和给定值比较,若某记录的关键字和给定值相等,则查找成功。否则不成功。
顺序表查找优化
因为每次循环都需要对数组索引i进行判断是否越界,但这会产生n次操作,我们可以设置一个哨兵,循环从数组尾部n开始,不需要每次比较。
该查找的平均查找次数为(n+1)/ 2,时间复杂度为O(n)。
有序表查找
折半查找又称为二分查找,前提是线性表中记录必须是关键码有序(通常从小到大)
折半查找的思想是在有序表中,去中间记录作为比较对象,若给定值与中间记录的关键字相等则查找成功,若给定值小于中间记录的关键字则在中间记录的左半区继续查找,大于则在右半区。(左小右大),不断重复直至查找成功,否则所有查找区域无记录查找失败为止。
【参数:low high mid key (与key值比较 大右减-大于 右半区 high减1 小左加同理)】
可以将折半排序想象成一个二叉排序树
插值查找----是根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值公式(只作了解)
斐波那契查找----利用黄金分割原理 公式-mid=low+F【k-1】-1 指针移动的间隔比折半查找的间隔大
线性索引查找-稠密、分块、倒排
稠密查找-是指在线性索引中将数据集中的每个记录对应一个索引项(索引项一定是按照关键码有序的排列) 索引项有序意味着查找关键字时可以用到折半、插值、斐波那契等有序查找算法
分块查找-把数据集的记录分成若干块,并满足块内无序、块间有序两个条件
倒排查找-类似于搜索引擎的技术