【数据结构】查找:基本概念及静态查找表(顺序查找、二分查找、索引查找)

#笔记整理
在这里插入图片描述

查找

基本概念

查找表
由同一类型的数据元素(记录)构成的集合。
查找的定义
给定一个值 key,在含有 n 个记录的表中找出关键字等于 key 的记录。若找到,则查找成功,返回该记录的信息或该记录在表中的位置;否则查找失败,返回相关的指示信息。

静态查找表(Static Search Table)——基于线性表的查找法
查询某个特定的元素是否在表中;检索某个特定的元素的各种属性。
即:只作查找操作的查找表。

动态查找表(Dynamic Search Table)——基于树表的查找法
若在查找的同时对表做修改运算(如插入和删除)。
即在查找过程中同时插入查找表中不存在的数据元素,或删除某个已存在的数据元素。

主关键字: 能唯一标识一个记录的关键字。
次关键字: 能标识多个记录的关键字。

平均查找长度 ASL(Average Search Length) :
为确定数据元素在查找表中的位置, 需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度。
在这里插入图片描述

静态查找表

三种在线性表上进行查找的方法:

  1. 顺序查找
  2. 折半查找(二分查找)
  3. 索引顺序表查找(分块查找)

因为不考虑在查找的同时对表做修改,故上述三种查找操作都是在静态查找表上实现的。

1. 顺序查找(sequential search)

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

2. 折半查找法 (binary search,二分查找法)

折半查找的思想:
将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表, 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

要求待查找的表必须是按关键字大小有序排列的顺序表。

判定树(比较树)
折半查找过程可用二叉树来描述,把当前查找区间的中间位置上的记录作为根,左子表和右子表的中间位置的记录分别作为根的左子树和右子树,这样形成的树称为折半查找判定树(比较树)。
在这里插入图片描述
折半查找效率分析
如果查找表中有 n 个元素,查找成功和失败的平均查找长度与有 n 个结点的完全二叉树的高度相同。即:
在这里插入图片描述
示例:
在这里插入图片描述

折半查找的改进——插值查找法(interpolation search)

插值查找法是根据要查找的关键字 Key 与查找表中最大最小记录的关键字比较后的查找方法。
前提: 关键字值分布比较均匀。
思路:
折半查找的 m i d mid mid = l o w + h i g h 2 {low + high} \over {2} 2

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值