查詢演算法__二分查詢
查詢演算法__二分查詢
原理
減而治之:以任一元素為界,都可將待查詢區間分為三部分
只需將目標元素與做一比較,即可分三種情況進一步處理:
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
- 【演算法】二分查詢演算法
- 演算法->二分查詢演算法
- LeetCode演算法—二分查詢LeetCode演算法
- 二分查詢(一)——純粹的二分查詢
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- 二分查詢
- 查詢演算法__Fibonacci查詢演算法
- 二分查詢演算法詳解演算法
- 演算法(一):二分查詢法演算法
- 二分查詢法
- PHP二分查詢PHP
- leetcode——二分查詢LeetCode
- leetcode -- 二分查詢LeetCode
- 查詢演算法__插值查詢演算法
- 二分查詢 | 二分查詢的一種推薦寫法
- 二分查詢及其變種演算法演算法
- 小白懂演算法之二分查詢演算法
- Java實現二分查詢演算法Java演算法
- 陣列的查詢(搜尋):線性查詢和二分法查詢陣列
- 牛客網 查詢(二分查詢、北郵機試)
- 704.二分查詢
- labuladong_二分查詢
- 詳解二分查詢
- python二分查詢模板Python
- 二分查詢(c++)C++
- 每日leetcode——二分查詢LeetCode
- Leetcode 704 二分查詢LeetCode
- 每日一道演算法:二分查詢演算法
- 查詢演算法之二分法演算法
- 死磕演算法之二分查詢法演算法
- 演算法 - 查詢演算法
- 查詢演算法演算法
- 力扣之二分查詢力扣
- 二分查詢的定義
- 二分查詢-不套用模板