查詢演算法之分塊查詢

2021-10-02 17:37:00 字數 872 閱讀 2223

演算法思想

1.將n個資料元素"按塊有序"劃分為m塊(m ≤ n)。

2.每一塊中的結點不必有序,但塊與塊之間必須"按塊有序";

3.即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字;

4.而第2塊中任一元素又都必須小於第3塊中的任一元素,……

分塊查詢是折半查詢和順序查詢的一種改進方法,分塊查詢由於只要求索引表是有序的,對塊內節點沒有排序要求,因此特別適合於節點動態變化的情況。

/**

* 分塊查詢

* @author qiu

* 時間複雜度:o(log(m)+n/m)

*/public

class

blocksearch

}return-1

;}//二分查詢、查詢key所在的塊數

public

static

intshunxusearch

(int

index,

int key,

int m)

else

if(key)else

}//查詢完畢,high為key所在的前乙個塊的塊號

return high+1;

}public

static

void

main

(string[

] args)

;//建立索引表

int st2=

;int a=

blocksearch

(index,st2,3,

6); system.out.

println

(a);

}}

查詢之分塊查詢

分塊查詢又稱索引順序查詢,吸取順序查詢和折半查詢的優點 基本思想 將查詢表分為若干個子塊。塊內的元素可以無序,但塊件是有序的,即第乙個塊中的最大關鍵字小於第二塊中的所有關鍵字,依次類推。再建乙個索引表,索引表中的元素含有各塊的最大關鍵字和各塊中第乙個元素的位址,索引表按關鍵字有序排列。示意圖 查詢分...

程式改錯之分塊查詢

錯誤 include define maxsize 100 typedef struct indexelem indexelem index maxsize int indexsearch indexelem index,int m,int r,int n,int key i index high ...

查詢演算法 分塊查詢

分塊查詢也稱為索引順序表查詢。分塊查詢就是將順序表 主表 分成若干個子表,然後為每個子表建立乙個索引表,利用索引在其中乙個子表中查詢。兩部分 索引表 儲存順序表的每個子表的開始索引和最大值。順序表 主表所有資料存放的位置。子表內可以是無序的,但是子表之前面的子表中每個元素必須小於後面子表中的每個元素...