二分查詢的上下界

2022-07-17 04:09:11 字數 896 閱讀 4042

如果陣列中有多個元素是我們要找的元素v,我們要返回這個數出現位置的上下界,或者沒找到該數要返回能插入此數的位置,這就是二分查詢的上下界問題

1

var2

n,i,j,k,l,r,m:longint;

3 a:array[1..10000] of

longint;

4function

find_high(k:longint):longint;

5begin

6 l:=1;r:=n;

7while l<=r do

begin

8 m:=(l+r) shr 1;9

if a[m]>k then r:=m-1

else l:=m+1;10

end;

11 exit(l-1

);12

end;

13function

find_low(k:longint):longint;

14begin

15 l:=1;r:=n;

16while l<=r do

begin

17 m:=(l+r) shr 1;18

if a[m]>=k then r:=m-1

else l:=m+1;19

end;

20 exit(r+1

);21

end;

22begin

23readln(n,k);

24for i:=1

to n do

read(a[i]);

25writeln(find_high(k));

26writeln(find_low(k));

27end.

模版 快速排序,二分查詢及其求其上下界函式

快速排序 void qsort int a,int l,int r return 1 當low high的時候表示查詢區間為空,查詢失敗 二分查詢求上界 即大於key值的最小值 第一種 int up int a,int low,int high,int key else high mid 1 ret...

二分查詢求下界時的bug

二分查詢求下界時有個小小的bug。假如我們想在有序的數列中找到小於等於num的第乙個數,如果這個數存在,那麼我們很容易就可以通過二分求下界的方法找到,如果不存在,那麼二分返回的值就有問題了。請看測試 include int a 10 n 10 用陣列a存0 20的奇數 int lower bound...

分治 二分查詢之單個元素 可重複元素上下界

目的 在乙個不重複的序列裡,找乙個元素,找不到返回 1。a 元素所在陣列 x,y 區間 v 元素值 int bserach int a,int x,int y,int v return 1 思路就很明了了。目的 當v存在時返回它出現的第乙個位置。如果不存在,返回這樣乙個下標i 在此處插入v 此處元素...