演算法之二分查詢

2021-08-20 02:37:10 字數 782 閱讀 8280

二分查詢演算法是運用分治策略的典型例子。

給定一組已經排好序的n個元素a[n],從這n個元素中找到乙個特定元素x。

基本思想:將n 個元素劃分成個數大致相同的兩部分,取中間元素a[n/2]與x進行比較:

如果x=a[n/2],即找到x,演算法終止;

如果x如果x>a[n/2],則只在陣列a的右半部分繼續查詢x。

c++

#include using namespace std;

//遞迴實現int search(int start,int last,int a,int target)

{ if(start>last) return -1;

int middle = (start+last)/2;

if(target==a[middle])return middle;

else if(target>a[middle])return search(middle+1,last,a,target);

else if(targeta[middle])left = middle+1;

else if(target複雜性分析:對於非遞迴實現,每執行一次while迴圈,待查詢陣列的大小減小一半,因此,最壞情況下,while迴圈被執行了o(logn)次,迴圈體內/外的運算需要o(1)時間,所以整個演算法在最壞情況下的時間複雜性為o(logn)。對於遞迴實現,最壞情況下進行o(logn)次遞迴,所以整個演算法在最壞情況下的時間複雜性也是o(logn)。

演算法之二分查詢

總時間限制 1000ms 記憶體限制 65536kb 描述在乙個非降序列中,查詢與給定值最接近的元素。輸入第一行包含乙個整數n,為非降序列長度。1 n 100000。第二行包含n個整數,為非降序列各元素。所有元素的大小均在0 1,000,000,000之間。第三行包含乙個整數m,為要詢問的給定值個數...

演算法之二分查詢

二分查詢針對的是乙個有序的資料集合,查詢思想有點類似分治思想,每次都通過跟區間的中間元素對比,將待查詢的區間縮小為之前的一半,直到找到想要查詢的元素,或是區間被縮小為0。二分查詢的時間複雜度為o l ogn o logn o logn l og nlogn logn 是乙個非常恐怖的數量級,即使n非...

演算法之二分查詢

模板 二分查詢模板 intbinarysearch int a,int left,int right,int target return 1 解決 尋找有序序列第乙個滿足條件的元素的位置 問題的模板 二分區間 left,right 必須覆蓋解的所有可能取值 intsolve int left,int...