数组先升后降,找到这个转折点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int bs(int a[] ,int l, int r){
if(l==r) return a[l];
if((l+1 == r) && a[l]>=a[r])
return a[l];
if((l+1 == r) && a[l]<a[r])
return a[r];
int m=(l+r)/2;
if(a[m] >a[m+1] && a[m] >a[m-1])
return a[m];
if(a[m] >a[m+1] && a[m] <a[m-1])
return bs(a,l,m-1);
else
return bs(a,m+1,r);
}