STL演算法 二分法

2021-09-28 15:44:18 字數 1930 閱讀 7143

binary_search

(陣列名+n1,陣列名+n2,值);

//n1和n2是int型,不加,預設為0 ,查詢範圍 【n1,n2),找到返回true,未找到則返回false

//「等於」的含義: a 等於 b <=> a < b和b < a都不成立

「等於」的含義: a 等於 b <=> a < b和b < a都不成立

「等於」的含有: a 等於 b <=> "a必須在b前面"和"b必須在a前面"均不成立

#include

#include

#include

using

namespace std;

struct rule //按個位數從小到大排列};

void

print

(int a,

int size)

intmain()

;sort

(a,a+6)

;print

(a,6);

cout <<

"result:"

<<

binary_search

(a,a+6,

12)

"result:"

<<

binary_search

(a,a+6,

77)

(a,a+6,

rule()

);//按個位數從小到大排列

print

(a,6);

cout <<

"result:"

<<

binary_search

(a,a+6,

7)

cout <<

"result:"

<<

binary_search

(a,a+6,

8,rule()

)

//按查詢規則排,8在98前和98在8前都不成立,即「等於」

return0;

}

binary_search,預設從小到大排,查詢的陣列需符合規則,否則無意義

1.lower_bound

二分查詢下界

在對元素型別為t的從小到大排好序的基本型別的陣列中進行查詢

t *

lower_bound

(陣列名+n1,陣列名+n2,值);

返回乙個指標 t * p;

*p 是查詢區間裡下標最小的,大於等於「值」的元素。如果找不到,p指向小標為n2的

元素在元素為任意的t型別,按自定義排序規則排好序的陣列中查詢

t *

lower_bound

(陣列名+n1,陣列名+n2,值,排序規則結構名())

;

返回乙個指標 t * p;

*p 是查詢區間裡下標最小,按自定義排序規則,可以排在「值「後面(大於等於)的元素。如果找不到,p指向下標為n2的元素

2.upper_bound

二分查詢上界

在對元素型別為t的從小到大排好序的基本型別的陣列中進行查詢

t *

upper_bound

(陣列名+n1,陣列名+n2,值);

返回乙個指標 t * p;

*p 是查詢區間裡下標最小的,大於「值」的元素。如果找不到,p指向小標為n2的

元素在元素為任意的t型別,按自定義排序規則排好序的陣列中查詢

t *

upper_bound

(陣列名+n1,陣列名+n2,值,排序規則結構名())

;

返回乙個指標 t * p;

*p 是查詢區間裡下標最小,按自定義排序規則,必須排在「值「後面(大於)的元素。如果找不到,p指向下標為n2的元素

二分法 演算法

查詢演算法中的 二分法 是這樣定義的 給定n個從小到大排好序的整數序列list,以及某待查詢整數x,我們的目標是找到x在list中的下標。即若有list i x,則返回i 否則返回 1表示沒有找到。二分法是先找到序列的中點list m 與x進行比較,若相等則返回中點下標 否則,若list m x,則...

演算法 二分法

二分法可以歸為兩大類 二分查詢演算法 二分排序演算法 二分合併演算法 演算法中經常用到二分查詢演算法,比如最常規的應用就是在乙個有序陣列中找特定的數,但是如何寫出乙個完整準確的二分法呢,邊界條件如何判斷,到底是等於還是不等?可能會困惱大家,比如說查詢第乙個等於5的數,那又在如何查詢呢?查詢最後乙個等...

二分法 演算法

二分法查詢,這個演算法要求資料要是有序的。比如有這樣的問題 找出乙個陣列中,兩個數的和小於等於15,然後輸出他們,否則就單獨輸出較大的數。binarysearch.cpp include using namespace std void binarysearch int array,int leng...