折半查詢(二分查詢)

2021-10-01 12:22:41 字數 1175 閱讀 2537

線性表中的記錄必須按關鍵碼有序

必須採用順序儲存

基本思想:

有序的線性表中,取中間位置的數作為比較物件。

若給定值與中間記錄的值相等,則查詢成功;

若給定值小於中間記錄的值,則在中間記錄的左邊繼續查詢;

若給定值大於中間記錄的值,則在中間記錄的右邊繼續查詢;

不斷重複上述過程,直到查詢成功,或所查詢的區域無記錄,查詢失敗。

int search(int k)

return 0; //查詢失敗,返回0 //區間內沒查詢到給定值。

}//下面是遞迴的方法

int search2(int low, int high, int k)

}

1.定義判定樹

折半查詢的過程可以用二叉樹來描述,

樹中的每個結點對應有序表中的乙個記錄,

結點的值該記錄在表中的位置

通常稱這個描述折半查詢過程的二叉樹為折半查詢判定樹,簡稱判定樹。

2.構造方法

⑴ 當n=0時,折半查詢判定樹為空;

⑵ 當n>0時,

折半查詢判定樹的根結點為mid=(n+1)/2,

根結點的左子樹是與有序表r[1] ~ r[mid-1]相對應的折半查詢判定樹,

根結點的右子樹是與r[mid+1] ~ r[n]相對應的折半查詢判定樹。

3.特點

1、任意兩棵折半查詢判定樹,若它們的結點個數相同,則它們的結構完全相同

2、具有n個結點的折半查詢樹的高度為[log2 n]+1

4.性質

任意結點的左右子樹中結點個數最多相差1

任意結點的左右子樹的高度最多相差1

任意兩個葉子所處的層次最多相差1

5.查詢效能

二分查詢(折半查詢)

二分查詢 折半查詢 從有序序列中找到給出的要查詢的數字。原理是 首先把乙個有序序列中間位置的值與要查詢的數比較,若相等則找到了有序序列中的此數 否則比較兩者的大小,若前者大,則把有序序列的中間位置以前的元素都去掉,餘下的元素組成乙個新的有序數列繼續上一步的操作,直到找到為止 若後者大,則把有序數列中...

折半查詢(二分查詢)

折半查詢 又稱二分查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有 序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前...

二分查詢(折半查詢)

時間限制 3000 ms 記憶體限制 65535 kb難度 3描述 在某一國度裡流行著一種遊戲。遊戲規則為 在一堆球中,每個球上都有乙個整數編號i 0 i 100000000 編號可重複,現在說乙個隨機整數k 0 k 100000100 判斷編號為k的球是否在這堆球中 存在為 yes 否則為 no ...