線性查詢 順序,二分,分塊 1

2021-08-20 13:28:37 字數 1612 閱讀 4642

1.**:

#include

using

namespace

std;

/*@順序查詢

*/int ordersearch(int

list, int length, int key)

}// 如果掃瞄完,說明沒有元素的值匹配key,返回-1,表示查詢失敗

return -1;

}int main()

; int result=ordersearch(array,sizeof(array)/sizeof(int),2);

cout

<1.**:

#include

using

namespace

std;

/*@二分查詢

使用二分查詢需要兩個前提:

(1) 必須是順序儲存結構。

(2) 必須是有序的表。

*/int binarysearch(int

list, int length, int key)

else

if (list[mid] < key)

else

}return -1;

}void print(int

list,int n)

; int len=sizeof(array)/sizeof(int);

sort(array,array+len);//二分的前提必須是有序

cout

<<"排序後:"

int result=binarysearch(array,len,8);

cout

<<"result: "

<1.演算法思想:

將n個資料元素」按塊有序」劃分為m塊(m ≤ n)。每一塊中的結點不必有序,但塊與塊之間必須」按塊有序」;即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字;而第2塊中任一元素又都必須小於第3塊中的任一元素,……

2.演算法流程:

step1 先選取各塊中的最大關鍵字構成乙個索引表;

step2 查詢分兩個部分:先對索引表進行二分查詢或順序查詢,以確定待查記錄在哪一塊中;然後,在已確定的塊中用順序法進行查詢。

3.分塊查詢的前提條件:

(1)索引表是有序的。

(2)對塊內節點沒有排序要求。

(3)特別適合於節點動態變化的情況

(4)由「分塊有序」的線性表和索引錶兩部分構成的

(5)所謂「分塊有序」的線性表,是指:

假設要排序的表為r[0…n-1],將表均勻分成b塊,前b-1塊中記錄個數為s=n/b,最後一塊記錄數小於等於s;

每一塊中的關鍵字不一定有序,但前一塊中的最大關鍵字必須小於後一塊中的最小關鍵字。

4.**

(1)查詢索引(有序)表:二分查詢

(2)查詢已經確定的塊(不一定有序):順序查詢

順序:建立索引表

索引二分查詢

根據索引分塊

塊內順序查詢

方法:利用結構體建立索引,之後根據塊索引訪問塊內元素

查詢1 線性表的查詢(順序 二分 分塊)

提前看目錄 1 設定監視哨的順序查詢 2 折半查詢 3 分塊查詢 普通的順序查詢就是利用迴圈遍歷,例如n個資料查詢,利用for i n i 0 i 迴圈,在進行if語句的判斷,我們會發現每一次都會執行i 0的判斷,而實際上只要存在這個元素,都是滿足這個條件的,所以這就增加了時間的複雜度。因此就有了設...

查詢演算法 順序查詢 二分查詢 分塊查詢

近期總結了各大排序演算法的原理 並對其進行了實現,想著一併把查詢演算法總結了,今天就著手開始總結查詢演算法。關鍵字與陣列中的數順序比較,時間複雜度o n void cgradationdlg onbutfind else if n 10 updatedata false 二分查詢又稱折半查詢,優點是...

資料結構(順序查詢 二分查詢 分塊查詢)

一 查詢 概念 給定乙個值k,在含有n個記錄的檔案中進行搜尋,尋找乙個關鍵字值等於k的記錄,如找到則輸出該記錄,否則輸出查詢不成功的資訊。二 靜態查詢表 順序查詢 2 折半查詢 折半查詢比順序查詢的效率要高,但它要求查詢表進行順序儲存並且按關鍵字有序排列,因此對錶進行元素的插入和刪除時,需要移動大量...