数据结构--查找
专题--查找
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 }