分块查找

理解:

分块查找也被叫做索引所需表查找,也就是在原先给的顺序便(主表)里面将其分块。分成连续的子表。子表的长度可以一样,也可以不一样。

并且每一个块里面设立两个元素(结构体那种的),一个是用来存块里面的最大值,一个是用来存块的其实位置是哪里。如果每一个块的长度是不一致的,那还要增加一个元素用来存储块的长度。

举例: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。

那么找到块之后,如果块内是无需的就按顺序表查找一个个找。如果是有序的你可以用顺序表查找,也可以用二分查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值