分块查找(C语言)

来源:百度知道 编辑:UC知道 时间:2024/05/08 14:50:01
分块查找算法实现如下
int blksearch(sqlist r,index idx,find=0,hb;) // bn为块个数 //
{ int i,;low=1,high1=bn,midl,find=0,hb;
while(low1<=high1&&!find)
{mid=(low1+high1)/2;
if(k<idx[mid1].key)high1=mid-1;
else if(k>idx[mid1],key)low1=mid1+1;
else{
low=mid1;
find=1;
}
}
if(low1<bn) //k小于索引表最大值//
{i=idx[low1].low;
hb=idx[low1].high;
}
while(i<hb&&r[i].key!=k)i++;
if(r[i].key!=k)i=0;
return(i);
麻烦大大解释下i=idx[low1].low这句代码指的是块的起始位置的值还是地一个块中的最小元素值以及程序中最后3句的作用(不清楚r[i]作什么,而且i还被赋予idx[low1].high的值,)

i=idx[low1].low是块中第一个元素的起始位置的值

int blksearch(sqlist r,index idx,find=0,hb;) // bn为块个数 //
{ int i,;low=1,high1=bn,midl,find=0,hb;
while(low1<=high1&&!find)
{mid=(low1+high1)/2;
if(k<idx[mid1].key)high1=mid-1;
else if(k>idx[mid1],key)low1=mid1+1;
else{
low=mid1;
find=1;
}
到这里是初步锁定要查的元素在那个块,找到大的方向后 在块里进行进一步的搜索
if(low1<bn)//如果low1的值没有超过块的总个数
i=idx[low1].low; //i赋值为该块内第一个元素的起始位置
然后进一步查到元素

1.函数形参有问题。
2.low和low1大概是一个吧。
3.i=idx[low1].low指的是当前块的起始位置
4.倒数第三句表示遍历当前块直到找到.key或超过索引表
倒数第二句表示未找到i=0
最后一句输出,若未找到则输出0
找到输出索引位置。