1、二分查找实现
迭代:
template<typename T>
int BinarySearch(T *array,T low,T high,T value)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]==value)
return mid;
else if(array[mid]>value)
high=mid-1;
else
low=mid+1;
}
return -1;
}
递归:
template<typename T>
int BinarySearch(T *array,int low,int high,T value)
{
if(low<=high)
{
int mid=(low+high)/2;
if(array[mid]==value)
return mid;
else if(array[mid]>value)
{
return BinarySearch(array,low,mid-1,value);
}
else
{
return BinarySearch(array,mid+1,right,value);
}
}
return -1;
}
2、二分查找应用
1、求=target的first位置
int search(int A[], int n, int target)
{
int low = 0, high = n-1,pos=-1;
while(low <= high)
{
// 注意:若使用(low+high)/2求中间位置容易溢出
int mid = low+((hig