二分查詢模板

2021-09-26 01:20:54 字數 1550 閱讀 3932

例如陣列中查詢乙個數

二分查詢的前提是整個陣列是有序的;

模板

int a[n]

;int l=

0,r=n-1;

int mid,key;

while

(l<=r)

另外還有一些二分查詢函式

a.函式模板:binary_search(arr,arr+size , indx)

c.函式功能: 在陣列中以二分法檢索的方式查詢,若在陣列(要求陣列元素非遞減)中查詢到indx元素則真,若查詢不到則返回值為假。

2.lower_bound:查詢第乙個大於或等於某個元素的位置。

a.函式模板:lower_bound(arr,arr+size , indx):

b.引數說明:

arr: 陣列首位址

size:陣列元素個數

indx:需要查詢的值

c.函式功能: 函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置(注意是位址)。如果所有元素都小於val,則返回last的位置

d.舉例如下:

乙個陣列number序列為:4,10,11,30,69,70,96,100.設要插入數字3,9,111.pos為要插入的位置的下標,則

/注意因為返回值是乙個指標,所以減去陣列的指標就是int變數了/

pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number陣列的下標為0的位置。

pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number陣列的下標為1的位置(即10所在的位置)。

pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number陣列的下標為8的位置(但下標上限為7,所以返回最後乙個元素的下乙個元素)。

e.注意:函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置。如果所有元素都小於val,則返回last的位置,且last的位置是越界的!

返回查詢元素的第乙個可安插位置,也就是「元素值》=查詢值」的第乙個元素的位置

3.upper_bound:查詢第乙個大於某個元素的位置。

a.函式模板:upper_bound(arr,arr+size , indx):

b.引數說明:

arr: 陣列首位址

size:陣列元素個數

indx:需要查詢的值

c.函式功能:函式upper_bound()返回的在前閉後開區間查詢的關鍵字的上界,返回大於val的第乙個元素位置

例如:乙個陣列number序列1,2,2,4.upper_bound(2)後,返回的位置是3(下標)也就是4所在的位置,同樣,如果插入元素大於陣列中全部元素,返回的是last。(注意:陣列下標越界)

返回查詢元素的最後乙個可安插位置,也就是「元素值》查詢值」的第乙個元素的位置 。

二分查詢模板

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。模板一當區間 l,r 的更新操作是r mid l mid 1 時,計算mid時不需要加1。int bsearch 1 in...

二分查詢模板

二分查詢模板總共有兩個 將區間分為 l,mid l,mid l,mid mid 1,r mid 1,r mid 1 r 時,如下 while l r else 將區間分為 l,mid 1 l,mid 1 l,mid 1 mi d,r mid,r mid,r 時,如下 while l r else 對...

模板 二分查詢

題目描述 給定乙個包含n個整數的數列和包含m個不重複整數的數列。輸出既包含於也包含於的整數的個數k。輸入格式 輸入共4行 第1行僅包含乙個正整數n 第2行包含n個整數ai,數字之間用乙個空格分隔 第3行僅包含乙個正整數m 第4行包含m個整數bi,數字之間用乙個空格分隔。輸出格式 輸出僅包含乙個整數k...