标签:
总觉得二分查找很简单,可实现起来却发现一个小错误会导致程序结果出错,本题是解决眼高手低的利题。
eaual_range
返回的一对指针,指向第一个等于key
值得元素和指向第一个大于该值的元素。因此,除了常规的非重复元素的二分查找(重复元素可能查找到任意一个值),还可以实现equal_range
的方式考察。
int binsearch(int arr[], int left, int right, int key)
{
if(arr == nullptr)
return -1;
while(left <= right)
{
int mid = left + ((right - left) >> 1);
if(arr[mid] < key)
left = mid + 1;
if(arr[mid] > key)
right = mid - 1;
else
return mid;
}
return -1;
}
int binsearch_min(int arr[], int left, int right, int key)
{
if(!arr)
return -1;
while(left < right)
{
int mid = left + ((right-left)>>1);
if(arr[mid] < key)
{
left = mid+1;
}else
{
right = mid;
}
}
if(arr[left] == key)
return left;
return -1;
}
int binsearch_justgreat(int arr[], int left, int right, int key)
{
if(!arr)
return -1;
while(left < right)
{
int mid = left + ((right-left)>>1);
if(arr[mid] <= key)
{
left = mid + 1;
}else
{
right = mid;
}
}
if(arr[right] > key)
return right;
return -1;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/yapian8/article/details/46777019