求分块查找算法 最好有代码和详细注释

怎么安放索引表?怎么初始的?
最好能把每个变量代表什么意思告诉我下

注意:采用“二分查找”时,初始的数组或其他线性表中的每个元素都必须是按一定的顺序排列的(从大到小,或从小到大),
该算法的基本思想:对一个有序数据序列,总是先把查找目标与该序列的中间的元素进行比较,我们假设该序列是由从小到大排列的,if(key > data[mid]),则key一定在data[mid]的又边,于是,把mid到序列data[end]分成一块,此时mid = (mid + end) / 2,依次类推

参考程序:

#include<stdio.h>
#define MAXSIZE 26 //定义索引表的最长长度
typedef char TYPE;

int blksearch(TYPE R[],TYPE K);
void main()
{
int num, i;
TYPE R[N + 1];
TYPE K;

for(i = 0;i<N;i++)
R[i]='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");
}

int blksearch(TYPE R[],TYPE K) //分块查找
{
int low1,mid,high1;
low1=0;
high1=N - 1; //二分查找区间上下界初值
while(low1<=high1)
{
mid=(low1+high1)/2;

if(K < R[mid])
high1=mid-1;
else
if(K > R[mid])
low1=mid+1;
else
return mid; //如果找到key,立即返回key的位置

}
return -1;// 只要上面的return语句没执行,则原数组中无key,返回-1

}
温馨提示:答案为网友推荐,仅供参考
相似回答