查詢演算法 分塊演算法

2021-08-09 08:38:32 字數 1242 閱讀 2505

查詢演算法-分塊演算法

查詢演算法主要有三種:

線性查詢、二分查詢、分塊查詢

線性查詢效率最慢,可對無序列表進行查詢、

二分查詢效率最快,只能針對有序列表進行查詢

分塊查詢的思路:

分塊查詢中,每個塊中元素不一定有序的,塊間是有序的。 

分塊又稱索引順序查詢,這是順序查詢的一種改進方法,用於在分塊有序表中進行查詢 。

主表:儲存資料的表,長度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...