分治演算法之二分查詢

2021-08-02 08:48:52 字數 690 閱讀 9247

c++提供一類stl函式來實現對陣列中元素的檢索,其中較為簡單且應用較廣的是binary_search,upper_bound和lower_bound,它們都被包含在標頭檔案#include中。

lower_bound(g) 用來找以g為下界的第乙個元素,而upper_bound(g)則用來找以g為上界的最後乙個元素,他們的返回值都是指向目標元素的迭代器(指標)。

用法如下:

//stl

//lower_bound與upper_bound

#include

#include//包含這兩個界限函式的標頭檔案

#include

using

namespace

std;

int a=,n=8,m,x,y,z,w;

void find_lower_bound(int aim)

printf("\nlower_bound:%d",x);//因為最後x=y,所以輸出x和輸出y是一樣的

}void find_upper_bound(int aim)

printf("\nupper_bound:%d",x);//同上

}int main()

這裡的函式原型其實是二分演算法,注意兩個函式的區別在於當a[m]=aim時到底是向前縮短區間還是向後縮短區間,這關係到最後x的取值。

演算法之二分查詢

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

演算法之二分查詢

二分查詢演算法是運用分治策略的典型例子。給定一組已經排好序的n個元素a n 從這n個元素中找到乙個特定元素x。基本思想 將n 個元素劃分成個數大致相同的兩部分,取中間元素a n 2 與x進行比較 如果x a n 2 即找到x,演算法終止 如果x如果x a n 2 則只在陣列a的右半部分繼續查詢x。c...

演算法之二分查詢

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