索引分块查找的实现.pptVIP

  • 3
  • 0
  • 约1.39千字
  • 约 9页
  • 2017-07-22 发布于天津
  • 举报
索引分块查找的实现.ppt

索引分块查找程序设计 指导教师: 演讲人: 4 实例演示 3 流程图 2 优点 1 基本思想 索引分块查找 基本思想 分块查找又称索引顺序查找,它是介于顺序查找和折半查找之间的查找方法。 基本思想: 首先将查找表分成若干块,在每一块中数据元素的存放是任意的,但块与块之间必须是有序的; 2. 建立一个索引表,把每块中最大的关键字值按块的顺序存放在一个辅助数组中,这个索引表也按升序排列; 3. 查找时先用给定的关键字值在索引表中查找,确定满足条件的数据元素存放在哪个块中; 4. 再到相应的块中顺序查找,便可以得到查找的结果。 优点 ①在表中插入或删除一个记录时,只要找到该记录所属的块,就在该块内进行插入和删除运算。 ②因块内记录的存放是任意的,所以插入或删除比较容易,无须移动大量记录。 分块查找的主要代价是增加一个辅助数组的存储空间和将初始表分块排序的运算。 分块查找算法的效率介于顺序查找和二分查找之间。 流程图 开始 取索引表有效项数和索引表首址 在索引表中读取数据块的首址和最大值 查找数据=该块最大值? 索引表有效项数比较完否? 读取下一数据块的首址 计算数据元素的个数 用顺序查找法在块内查找 找到否? 查找失败 查找成功 结束 Yes Yes No No Yes No 查找举例 若以索引顺序表表示静态查找表,则可以进行分块查找。 以下就是一个索引顺序表,把长度为18的顺序表分成3块,这三块中的关键字“分块有序”,然后找出每一块的最大关键字,并用指针指示每一块中的第一个记录。 动画演示查找成功 动画演示查找失败 程序演示 int blksearch(record r[],index idx[],keytype key) { int i=0,j; while(iidxN) { 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 j++; } return -1; } 1 7 13 22 48 86 起始地址 最大关键字 9 20 33 42 44 38 24 48 60 53 86 49 74 58 22 12 13 3 索引表 1 2 3 38 返回 查找成功! 关键字为第10个记录 int blksearch(record r[],index idx[],keytype key) { int i=0,j; //i代表索引块地址,j代表表中元素的地址 while(iidxN) { 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 j++; } return -1; } 1 7 13 22 48 86 起始地址 最大关键字 9 20 33 42 44 38 24 48 60 53 86 49 74 58 22 12 13 3 索引表 1 2 3 90 返回 查找失败! 该记录不存在

文档评论(0)

1亿VIP精品文档

相关文档