在我被二分木棍,二分求解高次方程組等等問題卡精度卡到懷疑人生之後,我決定這次用最簡單的例子來介紹一下二分查詢這個演算法。
演算法核心
二分演算法的核心就是通過待查詢資料與查詢域中值的大小關係來縮小查詢範圍,二分查詢的時間複雜度為o(logn)。
演算法流程
num:待查詢資料;
a:查詢範圍;
l:查詢範圍起始下標;
r:查詢範圍中止下標;
mid:查詢範圍下標中間值;
binarysearch(int l,int r)這裡我傳入了兩個引數,因為把查詢範圍的陣列定義為全域性陣列,所以沒有在這裡傳入,如果沒有將a定義為全域性陣列的話,二分查詢的函式就要傳入三個引數。當la[mid],說明待查詢資料在查詢範圍的後半部分,l=mid+1,繼續迴圈。最後如果直至迴圈結束都沒能返回,說明查詢範圍中沒有這個數,返回-1。下面**中輸入的部分是按照從小到大的順序。
迴圈
#include#includeusing namespace std;
const int maxn=105;
int a[maxn];
int n;//待排資料個數
int num;//要查詢的資料
int binarysearch(int l,int r)
return -1;
}int main()
分治法 二分查詢
1 首先二分查詢滿足分治法的四個條件 1 原問題的解可以通過分解為若干個小的問題來解決 將原陣列序列可分解為兩個子串行 2 小的問題的解決方法和原問題的解決方法大致相似 都是確定乙個序列的上界和下界然後求得mid進行比較 3 小問題的解可以通過合併從而得到原問題的解 在子串行中可以更容易得到解從而r...
分治法 二分查詢
問題描述 二分查詢又稱為折半查詢,它要求待查詢的資料元素必須是按關鍵字大小有序排列的。問題描述 給定已排好序的n個元素s1,sn,現要在這n個元素中找出一特定元素x。首先較容易想到使用順序查詢方法,逐個比較s1,sn,直至找出元素x或搜尋遍整個序列後確定x不在其中。顯然,該方法沒有很好地利用n個元素...
分治 二分查詢(C )
概念 二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。使用二分查詢的前置條件 待查表為有序表 演算法流程 首先,假設表中元素是按公升序排列。將表中間位置記錄的關鍵字mid與查詢關鍵字key比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中...