索引分块查找的实现

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

90
查找失败!不存在记录
22 12 13 1
3
9
Hale Waihona Puke Baidu
20 33 42 44 38 24 48 60 58 74 49 86 53 2 3 返回
38
查找成功! 关键字为第10个记录
22 12 13 1
3
9
20 33 42 44 38 24 48 60 58 74 49 86 53 2 3 返回
int blksearch(record r[],index idx[],keytype key) { //i代 int i=0,j; //i代 块 ,j代 while(i<idxN) { if(key<=idx[i].key){ break; } else i++; } j=idx[i].low; while(j<=idx[i].high) { if(key==r[j].key){ 索引表 return j;} else 最大关键字 22 48 86 j++; 起始地址 1 7 13 } return -1; }
分块查找的过程分析
将表分为b 将表分为b块,每一块中的关键字不一定有序,但前一块中的最大关 键字必须小于后一块中的最小关键字。即要求“分块有序” 键字必须小于后一块中的最小关键字。即要求“分块有序”。因此除 表本身外需建立一个索引表,内容包括每块的最大关键字项和指针项。 分块查找的过程分两步: 分块查找的过程分两步: (1)先确定块,确定块的查找可用顺序查找或折半查找(因为索引表 (1)先确定块,确定块的查找可用顺序查找或折半查找(因为索引表 中的关键字项是有序的)。 (2)再在块中查找,块内的查找只能用顺序查找(块内的关键字是无 (2)再在块中查找,块内的查找只能用顺序查找(块内的关键字是无 序的)。 例如查找KEY=38,则先将KEY依次和索引表中各最大关键字进行比较, 例如查找KEY=38,则先将KEY依次和索引表中各最大关键字进行比较, 因为22<KEY<48,所以可以确定关键字为38的记录若存在,必定在第 因为22<KEY<48,所以可以确定关键字为38的记录若存在,必定在第 二块中。然后,根据指针从第7 二块中。然后,根据指针从第7个记录开始进行顺序查找,直到找到 第10个位置为止。 10个位置为止。
动画演示查找成功 动画演示查找失败 程序演示
int blksearch(record r[],index idx[],keytype key) { int i=0,j; while(i<idxN) { if(key<=idx[i].key){ break; } else i++; } j=idx[i].low; while(j<=idx[i].high) { if(key==r[j].key){ 索引表 return j;} else 最大关键字 22 48 86 j++; 起始地址 1 7 13 } return -1; }
流程图
开始
取索引表有效项数和索引表首址
在索引表中读取数据块的首址和最大值 Yes 查找数据<=该块最大值? No No 索引表有效项数比较完否? Yes 读取下一数据块的首址 计算数据元素的个数 用顺序查找法在块内查找 No 查找失败 找到否? 结束 Yes 查找成功
分块查找举例
若以索引顺序表表示静态查找表,则可以进行分块查找。 以下就是一个索引顺序表,把长度为18的顺序表分成3 以下就是一个索引顺序表,把长度为18的顺序表分成3块,这三块 中的关键字“分块有序” 中的关键字“分块有序”,然后找出每一块的最大关键字,并用指 针指示每一块中的第一个记录。
索引分块查找索引分块查找-目录
① ② ③ ④ ⑤
索引分块查找基本思想 索引分块查找的优点 索引分块查找的过程分析 流程图 索引分块查找举例
索引分块查找索引分块查找-基本思想
分块查找又称索引顺序查找,它是介于顺序查找和折半查找之间 的查找方法。 基本思想: 1. 首先将查找表分成若干块,在每一块中数据元素的存放是任意的,但块 与块之间必须是有序的(假设这种排序是按关键字值递增的,也就是说在 第一块中任意一个数据元素的关键字都小于第二块中所有数据元素的关键 字,第二块中任意一个数据元素的关键字都小于第三块中所有数据元素的 关键字,依次类推); 2. 建立一个索引表,把每块中最大的关键字值按块的顺序存放在一个辅助 数组中,这个索引表也按升序排列; 3. 查找时先用给定的关键字值在索引表中查找,确定满足条件的数据元素 存放在哪个块中,查找方法既可以是折半方法,也可以是顺序查找。 4. 再到相应的块中顺序查找,便可以得到查找的结果。
分块查找的优点
优点: ①在表中插入或删除一个记录时,只要找到该记录所属的块,就在该 块内进行插入和删除运算。 ②因块内记录的存放是任意的,所以插入或删除比较容易,无须移动 大量记录。 分块查找的主要代价是增加一个辅助数组的存储空间和将初始表分块 排序的运算。 分块查找算法的效率介于顺序查找和二分查找之间。 若表中有10000个结点,则应把它分成100个块,每块中含100个结点。 若表中有10000个结点,则应把它分成100个块,每块中含100个结点。 用顺序查找确定块,分块查找平均需要做100次比较,而顺序查找平 用顺序查找确定块,分块查找平均需要做100次比较,而顺序查找平 均需做5000次比较,二分查找最多需14次比较。 均需做5000次比较,二分查找最多需14次比较。
相关文档
最新文档