分块查找

分块查找也称为顺序查找,要求将待查的元素均匀的分成块,块间按大小排序,块内不排序,所以要建立一个块的最大或最小关键字表,称为索引表

#include <stdio.h>

struct index
{
        int key;
        int start;
        int end;
} index_table[4];

int block_search(int key, int a[])
{
        int i,j;
        i = 1;
        while(i<=3 && key > index_table[i].key){
                i++;
        }
        if(i>3) return 0;
        j = index_table[i].start;
        while(j <= index_table[i].end && a[j] != key){
                j++;
        }
        if(j>index_table[i].end) j = 0;
        return j;
}

void main()
{
        int i,j=0,k,key,a[16];
        for(i=1;i<16;i++)
                a[i] = i;
        for(i=1;i<=3;i++)
        {
                index_table[i].start = j+1;
                j = j + 1;
                index_table[i].end = j + 4;
                j = j + 4;
                index_table[i].key = a[j];
        }

        scanf("%d",&key);
        k = block_search(key,a);
        printf("%d",k);
}