水下功夫做透,水上才能顺风顺水。

分块查找

假如有范围在[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)第二步在该块中查找指定元素,如果块中没有该元素,查找失败。

 

posted @ 2015-04-24 15:20  北方寒士  阅读(193)  评论(0编辑  收藏  举报