数据结构第九章 查找

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章 查找
8
9.2.2 二分查找
➢ 二分查找(折半查找):要求线性表中 的元素必须按关键字递增或者递减顺序 排列,而且要使用顺序存储结构。
第九章 查找
9
1. 用要查找的关键字k与中间位置的元素 的关键字相比较,这个中间元素把线性 表分成两个子表,如果比较结果相等, 则查找完成;
2. 若该元素的值大于关键字k,则把查找 范围定位中间位置之后的子表继续循环;
二分查找过程如下:
第九章 查找
12
开始: 2 4 7 9 10 14 18 26 32 40
low=0
high=9
mid=(0+9)/2=4 第1次比较: 2 4 7 9 10 14 18 26 32 40
low=0 high=3
mid=(0+3)/2=1
第2次比较: 2 4 7 9 10 14 18 26 32 40
low=2 high=3
mid=(2+3)/2=2 第3次比较: 2 4 7 9 10 14 18 26 32 40
R[2].key=7
查找成功,返回序号2
第九章 查找
13
二分查找过程可用二叉树来描述,我们 把当前查找区间的中间位置上的记录作为 根,左子表和右子表中的记录分别作为根的 左子树和右子树,由此得到的二叉树,称为描 述二分查找的判定树或比较树。
21
例如,设有一个线性表,其中包含25个记录,其关 键字序列为{8,14,6,9,10,22,34,18,19,31,40,38,
54,66, 46,71,78,68,80,85,100, 94,88,96,87}。假设 将25个记录分为5块,每块中有5个记录,该线性表的 索引存储结构如下图所示。
第九章 查找
4
在表的组织方式中,线性表是最简单的一种。三种 在线性表上进行查找的方法:
(1) 顺序查找
(2) 二分查找
(3) 分块查找。
因为不考虑在查找的同时对表做修改,故上述三种 查找操作都是在静态查找表上实现的。
第九章 查找
5
9.2.1 顺序查找
➢ 顺序查找(线性查找):从线性表的一 端开始,顺序扫描线性表,依次将扫描 到的结点关键字和给定值k比较,若当前 扫描到的元素关键字与k相等,则查找成 功;若扫描结束后,仍未找到关键字等 于k的结点,则查找失败。

18
➢ 索引表:是一个按关键字递增(递减) 顺序排列的有序顺序表,每一项对应线 性表中的一块,索引项包括关键字域和 链域。
➢ 关键字域:存放相应块的最大关键字值
➢ 链域:存放指向相应块第一个元素的指 针。
第九章 查找
19
➢ 分块查找(索引顺序查找)的过程分两 步进行:
1. 先确定待查找对象所在的块(子表);
(3)假设查找表中每个元素的概率相同,求查 找成功时的平均查找长度和查找不成功时的平均 查找长度。
第九章 查找
16
二分查找 判定树
(1)若查找给定值为20的元素,依次与表中 25,10,15,20元素比较,共比较4次。
(2)若查找给定值为26的元素,依次与25,30,28元 素比较,共比较3次。
第九章 查找
第九章 查找
6
例如,在关键字序列为{3,9,1,5,8,10,6,7,2,4} 的线性表查找关键字为6的元素。
顺序查找过程如下:
第九章 查找
7
开始: 3 9 1 5 8 10 6 7 2 4
第1次比较: 3 9 1 5 8 10 6 7 2 4
i=0 第2次比较: 3 9 1 5 8 10 6 7 2 4
9.1 查找的概念
第九章 查找
1
➢ 查找(检索):在某种数据结构中找出满 足给定条件的结点,若找到满足给定条件 的元素,查找成功,否则查找失败。
第九章 查找
2
由于查找运算的主要运算是关键字的比较,所以通
常把查找过程中对关键字需要执行的平均比较次数(也
称为平均查找长度)作为衡量一个查找算法效率优劣的
第九章 查找
14
R[0..10]的二分查线的判定树(n=11)
第九章 查找
15
例9.1对于给定11个数据元素的有序表 {2,3,10,15,20,25,28,29,30,35,40},采用二分查找, 试问:
(1)若查找给定值为20的元素,将依次与表中 哪些元素比较?
(2)若查找给定值为26的元素,将依次与哪些 元素比较?
14 34 66 85 100 key 0 5 10 15 20 link
8 14 6 9 10 22 34 18 19 31 40 38 54 66 46 71 78 68 80 85 100 94 88 96 87 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
17
9.2.3 分块查找
➢ 分块查找(索引顺序查找):把线性表 分成若干块,每一块中的元素存储顺序 是任意的,但是块与块之间必须按关键 字有序,即第二个子表中所有对象的关 键字均大于第一个子表中的最大关键字, 第三个子表中的所有关键字均大于第二 个子表中的最大关键字,……,依次类 推。
第九章 查找
2. 在块中顺序查找:
① 当在块中的某个记录比较后相等,则查 找成功;
② 当在块中的所有记录比较后都不等,则 查找不成功。
第九章 查找
20
最大关键字 22 48 86
起始地址
1 7 13
索引表
22 12 13 8 9 20 33 42 44 38 24 48 60 58 74 49 86 53
第九章 查找
第九章 查找
10
3. 若该元素的值小于关键字k,则把查找 范围定为中间位置之前的子表继续循环;
4. 循环过程一直进行到查找区间的上界小 于查找区间的下界为止,则查找失败
第九章 查找
11
例如,在关键字有序序列 {2,4,7,9,10,14,18,26,32,40}中采用二分查找法 查找关键字为7的元素。
标准。平均查找长度ASL(Average Search Length)
定义为:
n
ASL pici i1
其中,n是查找表中记录的个数。pi是查找第i个 记录的概率,一般地,均认为每个记录的查找概率相等,
即pi=1/n(1≤i≤n),ci是找到第i个记录所需进行的比较 次数。
第九章 查找
3
9.2 线性表查找
i=1 第3次比较: 3 9 1 5 8 10 6 7 2 4
i=2 第4次比较: 3 9 1 5 8 10 6 7 2 4
i=3 第5次比较: 3 9 1 5 8 10 6 7 2 4
第6次比较:
3
9
1
i=4 5 8 10
6
7
2
4
i=5 第7次比较: 3 9 1 5 8 10 6 7 2 4
i=6 查找成功,返回序号6
相关文档
最新文档