理解:
分块查找也被叫做索引所需表查找,也就是在原先给的顺序便(主表)里面将其分块。分成连续的子表。子表的长度可以一样,也可以不一样。
并且每一个块里面设立两个元素(结构体那种的),一个是用来存块里面的最大值,一个是用来存块的其实位置是哪里。如果每一个块的长度是不一致的,那还要增加一个元素用来存储块的长度。
举例:1,2,3,4,5,6,7,8,9,10
分块{
int index;存块里面的初始位置;
int maxnum;//存块里面的最大值;
int len;//这是但块的长度不一致的时候才会用到的;
}
假定分块长度为5。
第一块的索引属性为:块1.index=0(数组第一位从0开始),块1.maxnmu=5。
块2.index=5,块2.maxnum=10;
这时候如果你要找7的话那就再所有的索引里面遍历以下,发现。块1.maxnum<7<块2.maxnum。所以再第二块里面去找有没有7这个元素。
为什么呢:因为5是第一块里面的最大值,你比最大值还大,肯定不在这个块里面了。
怎么再块里面找有没有7这个元素呢找呢?这个时候,我们就要考虑到,因为分块有一个特点就是,块间是有序的,块内是无序的。什么意思的?就是你第二块里面的元素必须全部大于第一块的元素。但是快里面的元素管你是1,2,3,4,5。还是4,2,1,3,5。
那么找到块之后,如果块内是无需的就按顺序表查找一个个找。如果是有序的你可以用顺序表查找,也可以用二分查找。