专题--查找
1. 二分查找
1 /*二分查找*/
2 int Binary_Search(int a[],int n,int key)
3 {
4 int lo=0;
5 int hi=n;
6 //版本A
7 while(lo<hi)
8 {
9 int mid=(lo+hi)>>1;
10 if(a[mid]<key)
11 lo=mid+1;
12 else if(key<a[mid])
13 hi=mid;
14 else
15 return mid;
16 }
17
18 /*
19 //版本B:若多个命中元素,总能保证返回秩最大者;查找失败时,能够返回失败的位置
20 while(lo<hi)
21 {
22 int mid=(lo+hi)>>1;
23 key<a[mid] ?hi=mid:lo=mid+1;
24 }
25 return --lo;
26 */
27 return -1;
28 }
29
30 int main()
31 {
32 int a[]={0,1,2,3,4,5,6,7,8,9};
33 int index=Binary_Search(a,10,5);
34 cout<<index<<endl; //5
35 return 0;
36 }