折半查詢 適用於順序陣列

2021-09-28 19:51:16 字數 990 閱讀 1452

折半查詢的思路:

在順序陣列中,找到初始值(最小值),中間值,最大值,分別以low,mid,high表示。

然後進行迴圈查詢,例如圖:low=1,high=16,mid=(low+high)/2

如果key值剛好等於中間值mid,則返回中間值。

如果所求值key比中間值大,則在mid與high之間在進行第二次查詢,並把新的low值賦值成mid+1,high值不變,再求新的mid值,如此迴圈,迴圈進行的條件為初始值不大於最大值。

如果所求值key比中間值小,則與上相反。

**如下:

#include

//折半查詢(適用於順序陣列)

intbinsearch

(int arr,

int len,

int key)

else

if(arr[mid]

< key)

//中間值小於要找的值key,在中間值右邊找

else

//在中間值左邊找

}return-1

;//找不到返回-1;

}int

main()

;int len =

sizeof

(arr)

/sizeof

(arr[0]

);printf

("所給陣列為:arr =\n");

printf

("數字10在陣列中的下標為:\n");

printf

("%d\n"

,binsearch

(arr,len,10)

);return0;

}

結果如圖

折半查詢法(僅適用於已排好順序)

includeusing namespace std templateint binarysearch type array,int lenght,type key 不適用於char 型別 array mid key right mid 1 left mid 1 return 1 int main ...

折半查詢法(有序陣列)

在有序陣列中查詢時 從陣列的中間元素開始查詢,如果中間元素正好是要查詢的元素,則搜尋過程結束,如果所找元素大於 小於 中間元素,則在陣列大於 小於 中間元素的那一半中查詢,每一次跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半,相對於遍...

多選項查詢,適用於愛好等的搜尋,有時何必行轉列

create table t ids int identity,name varchar 100 insert into t name select 1,2,3 union all select 4,2,3 union all select 5,2,3 union all select 6,2,3 ...