分块搜索算法介绍及C语言/C++代码实现
1.算法介绍
块搜索是二分搜索和顺序搜索的改进方法。块搜索只需要索引表的顺序。块内的节点没有排序要求,因此特别适合节点的动态变化。它的核心包含两个索引表,第二个是块处理。
对于分块搜索,必须将一个大的线性表分成多个块。每个块中的节点可以任意存储,但块必须是有序的。假设键值不是降序的,那么这些块之间必须满足排序要求。事实上,对于任意i,第i个块中所有节点的键值必须小于该块中所有节点的i+1个键值。另外,还需要创建索引表,将每个块中的最大键值作为索引表的键值,按照块的顺序存储在辅助数组中。显然,这个附加数组是按键值降序排序的。 。查找时,首先查找索引表,确定要查找的节点所在的块。由于索引表是有序的,因此可以采用顺序查找或二分查找的方式来查找索引表;那么通过顺序查找就可以在对应的块中找到对应的节点。
2。算法的具体过程
用一张网络图片来说明:
![]()
假设要查找关键字38的具体位置。首先,将关键字38按顺序与索引表中最大的关键字进行比较。由于22 由于索引表中显示的第二个子表的起始位置是搜索表的第7个位置,因此从该位置开始顺序搜索到子表的最后一个关键字(通常搜索表是等分的情况下执行,具体分表个数根据实际位置而定)。结果是该关键字位于第 10 位。
3。代码的实现
代码仅供参考索引 4。生活映射 区块搜索在现实生活中也经常使用,每个类有很多,类有很多,例如数十名学生。给定一个学生的学号,要求查找该学生的相关信息。显然,每个班级的学生档案都是分开保存的,任意两个班级的学生人数是重叠的。那么最好的查找方法就是确定该学生所在的班级,然后在该学生所在班级的学生档案中查找该学生的信息。上述查找学生信息的过程实际上就是典型的分块查找。{ //判断区块结构}newIndex[3]; //定义结构体数组 int a[]); *a,const 无效* b) { 返回 结构 索引 * :-1 i, j=- 1, k, key; inta[] = {33,42,44,38,2,2,41,2 13,8,9,20, 60,58,74 ,49,86,53}; //确认初始值和最大值模块的 for ♷( i=3) { {/s,对于大于 I 的块。0 返回 -1 ; } 起始值 = 新索引[我开始; 块的起始值等于范围/} } (StartValue> startValue+5)比块范围的结束值表示没有找到数字。 返回起始值;}
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网