分块查找(C语言)

Python013

分块查找(C语言),第1张

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赋值为该块内第一个元素的起始位置

然后进一步查到元素

#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")

}