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

来源:互联网 发布:拆单软件下载 编辑:程序博客网 时间:2024/05/16 17:43

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

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