查詢演算法__二分查詢
查詢演算法__二分查詢
原理
減而治之:以任一元素為界,都可將待查詢區間分為三部分
只需將目標元素與做一比較,即可分三種情況進一步處理:
1):則若存在必屬於左側子區間,故可遞迴深入
2):則若存在必屬於右側子區間,故可遞迴深入
3):在此處命中,返回下標位置,並結束
C++實現
函式說明:如果查詢成功返回其下標(如果有多個,返回任意一個),如果查詢失敗返回-1
template<typename T>//在有序區間[lo,hi)內查詢元素e
int binSearch(T *A,T const &e,int lo,int hi)
{
while(lo<hi)//每步迭代可能要做出兩次比較判斷,有三個分支
{
int mid=(lo+hi)>>1;//以中點為軸點
if(e<A[mid])
hi=mid;//深入前半段[lo,mid)繼續查詢
else if(e>A[mid])
lo=mid+1;//深入後半段[mid+1,hi)
else
return mid;//在mid處命中
}
return -1;//查詢失敗
}
時間複雜度分析
線性遞迴:,大大優於順序查詢
遞迴跟蹤:軸點總取中點,遞迴深度,各遞迴例項均耗時
查詢長度分析(比時間複雜度估計更準確的評估方法)
1、查詢成功
2、查詢失敗
成功、失敗時的平均查詢長度均大致為
示例分析
成功時的平均查詢長度:
失敗時的平均查詢長度:
相關文章
- 查詢演算法之二分查詢演算法
- 查詢——二分查詢
- 二分查詢【折半查詢】演算法 PHP 版演算法PHP
- Python查詢-二分查詢Python
- 二分查詢演算法演算法
- 演算法->二分查詢演算法
- 【演算法】二分查詢演算法
- 順序查詢和二分查詢
- 二分查詢(一)——純粹的二分查詢
- 【演算法】二分查詢與暴力查詢(白名單過濾)演算法
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- 二分查詢
- 查詢演算法集:順序查詢、二分查詢、插值查詢、動態查詢(陣列實現、連結串列實現)演算法陣列
- 演算法(一):二分查詢法演算法
- 二分查詢演算法詳解演算法
- 重溫二分查詢演算法演算法
- [演算法]各種二分查詢演算法
- c#-二分查詢-演算法C#演算法
- 【資料結構】折半查詢(二分查詢)資料結構
- PHP二分查詢PHP
- 二分查詢法
- 二分查詢 | 二分查詢的一種推薦寫法
- 查詢演算法__插值查詢演算法
- 小白懂演算法之二分查詢演算法
- 二分查詢及其變種演算法演算法
- 演算法一 二分查詢( by Python)演算法Python
- Java實現二分查詢演算法Java演算法
- LeetCode演算法—二分查詢LeetCode演算法
- #查詢演算法#【1】簡單查詢:順序、折半查詢演算法
- 陣列的查詢(搜尋):線性查詢和二分法查詢陣列
- 牛客網 查詢(二分查詢、北郵機試)
- 查詢演算法__Fibonacci查詢演算法
- 二分查詢(c++)C++
- BinarySearch(二分查詢)
- 詳解二分查詢
- 704.二分查詢
- 每日一道演算法:二分查詢演算法
- 查詢演算法之二分法演算法