有序表的靜態查詢演算法 折半查詢

2022-01-28 18:53:20 字數 990 閱讀 7859

今天在看到資料結構 靜態表的查詢的時候,看到乙個演算法挺有意思,理解也 比較容易。

這是乙個有序表的查詢演算法,比如(2,3,4,5,11,22,23,44,55,57,88)這樣的有序結構。

折半查詢(binary search)的過程:先確定帶查記錄所在的範圍或者區間,然後逐步縮小範圍,直到找到或者找不到該記錄為止。

比如待查的記錄key是23.

剛開始low的位置1,high的位置是11.那麼中間的mid的位置是(1+11)/2;

相對於的結構物件arr[low/mid/hight]可以找到對應的各個資料記錄。

2,3,4,5,11,22,23,44,55,57,88

low              mid                 high

使用arr[mid]與key進行大小比較。 因為arr[mid]=22 而且所以設定 low 指向mid+1,high不變,mid 仍然是(low + high)/2. 如此論推,知道arr[mid]=key找到記錄或者low=high找不到key

下面是偽**描述

eq函式:判斷兩個數值是否相等

lq(a,b)函式:判斷數值a是否大於數字b;

int search(int arr,int key)//返回記錄在arr中的位置

int low = 1;//描述位置

int high = arr.length;

while(low <= high)

mid = (low + high)/2;

if(eq(key,arr[mid])) return mid;

else if(lq(key,arr[mid])) low = mid + 1

else high = mid -1;

return 0;

折半查詢比順序查詢效率高,但是只適合有序表,而且限制必須是順序結構儲存的資料(線性鍊錶無法使用折半查詢法)。

本文使用blog_backup未註冊版本匯出,請到soft.pt42.com註冊。

折半查詢 有序表的查詢

平均查詢長度 logn typedef int keytype typedef structsstable int search bin sstable st,keytype key return 0 int main int argc,char argv printf nplease input ...

有序表的折半查詢

輸入 t 有序表中數的個數 輸入t個數,按照大小順序輸入 key輸入需要查詢的數 輸出 如果有這個數則輸出這個數在有序表中是第幾個,否則輸出no!input 1 16 24 35 47 59 62 73 88 99 output no.7 include includeint binary sear...

靜態查詢表 順序查詢 折半查詢 分塊查詢

引言 除去各種線性和非線性的資料結構外,還有一種在實際應用中大量使用的資料結構 查詢表。查詢表是由同一型別的資料元素構成的集合。對查詢表經常進行的操作有 1 查詢某個 特定的 資料元素是否在查詢表中 2 檢索某個 特定的 資料元素的各種屬性 3 在查詢表中插入乙個資料元素 4 從查詢表中刪去某個資料...