假如有范围在[0,1000]的一组数,关键点有{0,...,300,...,600,...1000},设计分块查找算法。
一.如何存储
我们可以根据关键点,将数据分为四组:[0,300]一组,(301,600]一组,(601,1000]一组。
分组之前我们先构建初始索引表,索引表的结构如下:
typedef struct IndexTable
{
int grpMax;//组内最大值
int startIndex;//组的起始点
int grpSize;//组的规模
} IndexTable;
IndexTable indexTable[3];
索引表的组内最大值和起始点都应是有序的。
分块查找就是将主表分为若干个块,至少要保证块间是有序的,快内可以有序也可以无序。
具体怎么分块根据实际情况确定,当每块大小相同时,可以省略组规模这个成员变量。
二.如何查找
(1)第一步需要确定查找元素所在的块。
(2)第二步在该块中查找指定元素,如果块中没有该元素,查找失败。