标签:
二分查找的前提是数组必须有序。这个算法据某本说,百分之九十的都会写错。编写程序需要注意的是
mid = ((right - left) >> 1) + left ;
可以防止两个整型值相加时溢出。并注意>>
运算符优先级低于+ - * / %
,所以要对左移右移加括号。如果没有加括号,得出的答案是错误的。比如:2 >> 1 + 2
你试下打印出来是多少。int binarySearch(vector<int> &array, int target) {
// write your code here
if (array.empty())
return -1;
int left = 0;
int right = array.size() - 1;
int mid = 0;
while(left + 1 < right)
{
mid = ((right - left) >> 1) + left ;
if(array[mid] > target)
{
right = mid;
}
else if(array[mid] < target)
{
left = mid ;
}
else
{
right = mid;
}
}
if(array[left] == target)
return left;
if(array[right] == target)
return right;
return -1;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zwhlxl/article/details/47156321