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

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

//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;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值