您的位置:首页 > 其它

二分查找

2014-10-22 17:30 253 查看
要准确实现二分查找,首先要把握下面几个要点:

关于right的赋值

right = n-1 => while(left <= right) => right = middle-1;

right = n => while(left < right) => right = middle;

middle的计算不能写在while循环外,否则无法得到更新。

int BinarySearch(int array[], int n, int value)
{
int left = 0;
int right = n - 1;
//如果这里是int right = n 的话,那么下面有两处地方需要修改,以保证一一对应:
//1、下面循环的条件则是while(left < right)
//2、循环内当 array[middle] > value 的时候,right = mid

while (left <= right)  //循环条件,适时而变
{
int middle = left + ((right - left) >> 1);  //防止溢出,移位也更高效。同时,每次循环都需要更新。

if (array[middle] > value)
{
right = middle - 1;  //right赋值,适时而变
}
else if(array[middle] < value)
{
left = middle + 1;
}
else
return middle;
//可能会有读者认为刚开始时就要判断相等,但毕竟数组中不相等的情况更多
//如果每次循环都判断一下是否相等,将耗费时间
}
return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: