查詢演算法-分塊演算法
查詢演算法主要有三種:
線性查詢、二分查詢、分塊查詢
線性查詢效率最慢,可對無序列表進行查詢、
二分查詢效率最快,只能針對有序列表進行查詢
分塊查詢的思路:
分塊查詢中,每個塊中元素不一定有序的,塊間是有序的。
分塊又稱索引順序查詢,這是順序查詢的一種改進方法,用於在分塊有序表中進行查詢 。
主表:儲存資料的表,長度n;
索引表:將主表分塊,每塊長s,找出每塊中的關鍵字最大值,並且儲存該塊中所有資料在主表中的索引
(1)分塊:將n個資料元素「按塊有序」劃分為m塊。
每一塊中的結點不必有序,但塊與塊之間必須「按塊有序」;即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字;而第2塊中任一元素又都必須小於第3塊中的任一元素。每個塊中元素不一定是有序的。
(2)根據查詢值,和索引表中關鍵字(每塊中的最大關鍵字)比較,通過對分查詢/順序查詢,找到該值所在的塊範圍;
(3)在相應塊中,找到該值在主表中的位置。
針對有序陣列的分塊查詢**實現:
#import struct indexblock //定義塊的結構
indexblock[4]; //定義結構體陣列
int main(int argc, const char * argv)
; printf("已知有一組數:\n");
for (int i = 0; i < 15; i++)
printf("\n");
for (int i = 0; i < 3; i++)
printf("請輸入你要查詢的數:\n");
scanf("%d", &x);
k = blocksearch(x, a);
if (k >= 0)
else
}return 0;
}int blocksearch(int x, int a)
if (i >= 3)
j = indexblock[i].start; //j等於塊範圍的起始值
while (j<=indexblock[i].end && a[j]!=x)
if (j > indexblock[i].end)
return j;
}
查詢演算法 分塊查詢
分塊查詢也稱為索引順序表查詢。分塊查詢就是將順序表 主表 分成若干個子表,然後為每個子表建立乙個索引表,利用索引在其中乙個子表中查詢。兩部分 索引表 儲存順序表的每個子表的開始索引和最大值。順序表 主表所有資料存放的位置。子表內可以是無序的,但是子表之前面的子表中每個元素必須小於後面子表中的每個元素...
查詢演算法之分塊查詢
演算法思想 1.將n個資料元素 按塊有序 劃分為m塊 m n 2.每一塊中的結點不必有序,但塊與塊之間必須 按塊有序 3.即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字 4.而第2塊中任一元素又都必須小於第3塊中的任一元素,分塊查詢是折半查詢和順序查詢的一種改進方法,分塊查詢由於只要求...
驗證分塊查詢演算法
include define maxl 100 資料表的最大長度 define maxi 20 索引表的最大長度 typedef int keytype typedef char infotype 10 typedef struct nodetype typedef nodetype seqlist...