概念:
二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。
使用二分查詢的前置條件:待查表為有序表
演算法流程:
首先,假設表中元素是按公升序排列。
將表中間位置記錄的關鍵字mid與查詢關鍵字key比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字mid大於查詢關鍵字key,則進一步查詢前一子表,否則進一步查詢後一子表。
重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
現有一含有n個元素的有序陣列a(從小到大排列),查詢key:
獲取兩個變數left、right,查詢開始的時候:設定兩個變數left=0,right=n-1;
計算陣列中間元素下標mid,mid=left+(right-left)/2,比較a[mid]和key的大小;
a[mid]==key,查詢成功
a[mid]>key,遞迴查詢左半數組a[left,mid-1]
a[mid]
重複步驟2,直到查詢成功或查詢失敗。
// 二分查詢
#include
using
namespace std;
intbinarysearch
(int array,
int x,
int y,
int key)
;int
main()
cout <<
"請輸入要求查詢的元素:"
; cin >> key;
cout <<
"\n「"
<< key <<
"」是第 "
<<
binarysearch
(array,
0, n-
1, key)+1
<<
" 個元素!"
<< endl;
delete
array;
return0;
}// 遞迴
intbinarysearch
(int array,
int left,
int right,
int key)
}// 非遞迴
分治 二分查詢
在我被二分木棍,二分求解高次方程組等等問題卡精度卡到懷疑人生之後,我決定這次用最簡單的例子來介紹一下二分查詢這個演算法。演算法核心 二分演算法的核心就是通過待查詢資料與查詢域中值的大小關係來縮小查詢範圍,二分查詢的時間複雜度為o logn 演算法流程 num 待查詢資料 a 查詢範圍 l 查詢範圍起...
分治法 二分查詢
1 首先二分查詢滿足分治法的四個條件 1 原問題的解可以通過分解為若干個小的問題來解決 將原陣列序列可分解為兩個子串行 2 小的問題的解決方法和原問題的解決方法大致相似 都是確定乙個序列的上界和下界然後求得mid進行比較 3 小問題的解可以通過合併從而得到原問題的解 在子串行中可以更容易得到解從而r...
分治法 二分查詢
問題描述 二分查詢又稱為折半查詢,它要求待查詢的資料元素必須是按關鍵字大小有序排列的。問題描述 給定已排好序的n個元素s1,sn,現要在這n個元素中找出一特定元素x。首先較容易想到使用順序查詢方法,逐個比較s1,sn,直至找出元素x或搜尋遍整個序列後確定x不在其中。顯然,該方法沒有很好地利用n個元素...