/*本程序实现分块查找算法 又称索引顺序查找 需要注意的是分块查找需要2次查找 先对块查找 再对块内查找 2013.12.16 18:44*/
#include <stdio.h>
#define N 12
struct index
{
int key;
int start;
int end;
}index[4];
int search(int a[],int l,int o)//实现分块查找
{
int i,j=0;
for(i=0;i<4;i++)//实现分块
{
index[i].start=j++;
j+=3;
index[i].end=j;
index[i].key=a[j];//关键数据,标记
}
i=0;
while(i<4&&o>index[i].key)//确定所在块
i++;
if(i>=4)
return -1;
j=index[i].start;
while(j<=index[i].end&&a[j]!=o)//在块内确定位置,以while语句替代if 简洁
j++;
if(j>index[i].end)
j=-1;
return j;
}
int main(int argc,char **argv)
{
int n[N] ={2,4,8,10,12,14,15,17,21,22,44,55};//要求数据元素必须有序
int i=0;
int result;
int input;
printf("
所有数据如下,请输入要查找的数据,本程序将列出它的位置 采用分块查找算法
");
while(i<N)
{
printf("%d ",n[i]);
i++;
}
puts("
");
scanf("%d",&input);
result=search(n,N,input);
if (result==-1)
printf("输入有误,请检查!");
else
printf("您查找的数据 %d在 %d处
",input,result);
return 0;
}