#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) //大於分得的塊數,則返回0 return 0; j=index_table[i].start; //j等於塊範圍的起始值 while(j<=index_table[i].end&&a[j]!=key) //在確定的塊內進行順序查詢 j++; if(j>index_table[i].end) //如果大於塊範圍的結束值,則說明沒有要査找的數,j置0 j = 0; return j; } int main() { int i,j=0,k,key,a[16]; printf("請輸入15個數:n"); for(i=1;i<16;i++) scanf("%d",&a[i]); //輸入由小到大的15個數 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]; //確定每個塊範圍中元素的最大值 } printf("請輸入你想査找的元素:n"); scanf("%d",&key); //輸入要查詢的數值 k=block_search(key,a); //呼叫函數進行杳找 if(k!=0) printf("查詢成功,其位置是:%dn",k); //如果找到該數,則輸出其位置 else printf("查詢失敗!"); //若未找到,則輸出提示資訊 return 0; }
請輸入15個數:
11 12 18 28 39 56 69 89 96 122 135 146 156 256 298
請輸入你想査找的元素:
96
查詢成功,其位置是:9