代码思路:在一组有序数中找某一组数,先将这组数分为几块,然后在每一块中列出最大值,将要查找的数和每一块的最大值进行比较,若此数小于某一块中的最大值那么要要找的数就在这一块中。
代码:
//key为块中最大数,a[]为数据源,len为数据源长度,que为查找数据所分每个块的数据量,value为要查找的数
int findValue(int a[],int len,int value){
struct index{
int key;
int start;
int end;
}index[4];//定义4份这样的结构体数据
//先对数组数据进行分块
int i,j = -1;
int que = 5;
for(i = 0;i < (len/que);i++){
index[i].start = j + 1; //分块的起始点
j = j + 1;
index[i].end = j + 1 + (len/que); //分块的终点
j = j + 1 + (len/que);
index[i].key = a[j]; //确认当前块中的最大数(a[i]为一组有序数)
}
//查数
i = 0;
while(i < (len/que) && value > index[i].key)
i++;
if(i >= 3){
printf("未查找到此数据");
return -1;
}
j = index[i].start;
while(j <= index[i].end && a[j] != value)
j++;
if(j > index[i].end)
j = -1;
return j;
}