STL中的二分查詢法 演算法 筆記

2021-10-04 03:16:10 字數 3560 閱讀 5683

用binary_search進行二分法查詢(用法一)

方法:binary_search(陣列名+n1,陣列名+n2,值);

注:

1:n1和n2都是int型別的表示式,可以包含變數,如果n1=0,則+n1可以不寫

查詢區間為下標範圍為[n1.n2)的元素,下標為n2的元素不在

在該區間內查詢"等於"值的元素,返回值為true(找到)或false(沒找到)

查詢時的排序規則,必須和排序時的規則一致!

用binary_search進行二分查詢(用法二)

在用自定義排序好的,元素為任意的t型別的陣列中進行二分查詢

方法:binary_search(陣列名+n1,陣列名+n2,值,排序規則結構名());

n1和n2都是int型別的表示式,可以包含變數

如果n1=0,則+n1可以不寫

查詢區間為下標範圍[n1,n2)的元素,下表為n2的元素不在查詢區間內

在該區間內查詢等於值的元素,返回值為true(找到)或false(沒找到)

查詢時的排序規則,必須和排序時的規則一致

int

main()

;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)

"result"

<<

binary_search

(a,a+6,

8,rule()

)

}result:

1result:021

,12,3

,45,7

,98,result:

0result:

1//為什麼元資料中沒有8還返回了了1呢。因為是按照個位查詢的數

用lower_bound二分查詢下界(用法一)

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

方法:t*lower_bound(陣列名+n1,陣列名+n2,值);

返回乙個指標t*p;

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

用lower_bound二分查詢下界(用法二)

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

方法:t*lower_bounde(陣列名+n1,陣列名+n2,值,排序規則結構名());

返回乙個指標t*p;

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

用upper_bound二分查詢上界(用法一)

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

用法:t*upper_bound(陣列名+n1,陣列名+n2,值);

返回乙個指標t*p;

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

用upper_bound二分查詢上界(用法二)

在元素型別為t,按照自定義排序規則的陣列中進行查詢

方法:t*upper_bound(陣列名+n1,陣列名+n2,值,排序規則結構名());

返回乙個指標t*p;

*p是查詢區間下標最小的,按照自定義規則,必須排在值後面的元素,如果找不到,p指向下標為

n2的元素"

#include

#include

#include

using

namespace std;

struct rule};

void

print

(int a,

int size)

cout<}#define num 7;

intmain()

;sort

(a,a+num)

;print

(a,num)

;//=>3,5,5,7,12,21,98,

int*p=

lower_bound

(a,a+num,5)

;cout<<

*p<<

" ,"

5,1

p=upper_bound

(a,a+num,5)

;cout<<

*p7

cout<<

*upper_bound

(a,a+num,13)

21

sort

(a,a+num,

rule()

);//按照個位數排序了

print

(a,num)

;//=>21,12,3,5,5,7,98;

cout<<

*lower_bound

(a,a+num,

rule()

)7

cout<<

lower_bound

(a,a+num,25,

rule()

)-a3

cout<<

upper_bound

(a,a+num,18,

rule()

)-17if(

upper_bound

(a,a+num,18,

rule()

)==a+num)

cout<<

"not found"

not found

cout<<

*upper_bound

(a,a+num,5,

rule()

)7

cout<<

*upper_bound

(a,a+num,4,

rule()

)5

return0;

}

STL二分查詢法

用binary search進行二分查詢 用法一 查詢區間為下標範圍為 n1,n2 的元素,下標為n2的元素不在查詢區間內在該區間內查詢等於 值 的元素,返回值為true 找到 或者false 沒找到 等於的含義不是簡單的 真實含義是 a等於b a用binary search進行二分查詢 用法二 查...

二分查詢法(STL)詳解

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。不妨設有序表是遞增有序的。查詢過程 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 ...

STL二分查詢演算法

主要是2個東西 lower bound和upper bound的用法 1 lower bound int p lower bound a,a n,x a 在已排陣列a中尋找x的位置易知其含義 是尋找大於或等於x的第乙個位置 int a 7 sort a,a 7 int p lower bound a...