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赋值为该块内第一个元素的起始位置
然后进一步查到元素
#include<stdio.h>#define N 26
typedef struct
{
char key //datatype other
}table
// table R[N+1]//可以不用全局变量滴
int blksearch(table R[],char K)//分块查找
{
int low1,mid,high1
low1=0
high1=N - 1//二分查找区间上下界初值
while(low1<=high1)
{
mid=(low1+high1)/2
if(K <R[mid].key)
high1=mid-1
else
if(K >R[mid].key)
low1=mid+1
else
return mid //如果找到key,立即返回key的位置
}
return -1// 只要上面的return语句没执行,则原结构体数组中无key,返回-1
}
//也不晓得你为什么要用结构体数组,一个一般的数组就可以滴
void main()
{
int num, i
table R[N + 1]
char K
for(i = 0i<Ni++)
R[i].key='a'+i
printf("\nplease input the key number:\n")
K=getchar()
num=blksearch(R,K)
if(num!=-1)
printf("第%d个是关键字\n",num+1)
else
printf("查找失败!\n")
}