数据查找---分块查找法

代码思路:在一组有序数中找某一组数,先将这组数分为几块,而后在每一块中列出最大值,将要查找的数和每一块的最大值进行比较,若此数小于某一块中的最大值那么要要找的数就在这一块中。
代码:web

//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;
        }