二分查找总结

之前一直以为二分查找很简单,结果(╯︵╰)  每次用都会出错,今天就来总结一下~

怎么记住:

(默认是递增的)

1.if里面与与想要的结果一样,想要  >=  里面就是  >=  ,第一个大于等于key说明是往左边找,所以也返回左边,其他同理。

 1 #include"iostream"
 2 #include"algorithm"
 3 using namespace std;
 4 const int maxn=1e5+5;
 5 int a[maxn]={0,2,5,7,7,10,10,15};
 6 //找小于等于key的
 7 int find_less_equal(int L,int R,int key)
 8 {
 9     int ans=-1;
10     while(L<=R)
11     {
12         int mid=(L+R)>>1;
13         if(a[mid]<=key)L=mid+1;
14         else R=mid-1;
15     }
16     ans=R;
17     return ans;
18 }
19 //找小于key的
20 int find_less_unequal(int L,int R,int key)
21 {
22     int ans=-1;
23     while(L<=R)
24     {
25         int mid=(L+R)>>1;
26         if(a[mid]<key)L=mid+1;
27         else R=mid-1;
28     }
29     ans=R;
30     return ans;
31 }
32 //找大于等于key的
33 int find_greater_equal(int L,int R,int key)
34 {
35     int ans=-1;
36     while(L<=R)
37     {
38         int mid=(L+R)>>1;
39         if(a[mid]>=key)R=mid-1;
40         else L=mid+1;
41     }
42     ans=L;
43     return ans;
44 }
45 //找大于key的
46 int find_greater_unequal(int L,int R,int key)
47 {
48     int ans=-1;
49     while(L<=R)
50     {
51         int mid=(L+R)>>1;
52         if(a[mid]>key)R=mid-1;
53         else L=mid+1;
54     }
55     ans=L;
56     return ans;
57 }
58 int main()
59 {
60 
61 }

 

posted on 2018-03-21 20:36  血腥刽子手  阅读(157)  评论(0编辑  收藏  举报

导航