我想实现二进制搜索整数数组.我确保数组按递增顺序排序.但我的功能是没有跟踪所有情况,一些检查失败.我在这里错过了什么?
Value代表我试图找到的整数.
bool search(int value, int array[], int n)
{
int left = 0;
int right = n - 1;
int middle = (left + right) / 2;
while (right >= left)
{
if (array[middle] == value)
return true;
else if (array[middle] < value)
right = middle;
else if (array[middle] > value)
left = middle + 1;
middle = (left + right) / 2;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是没有预测到一些左边界或右边界的情况.我也不太了解while情况.
如果array[middle] < value你需要改变,你左右混合left.
bool search(int value, int array[], int n)
{
int left = 0;
int right = n - 1;
int middle = left + (right - left) / 2;
while (right >= left)
{
if (array[middle] == value)
return true;
else if (array[middle] > value)
right = middle - 1;
else if (array[middle] < value)
left = middle + 1;
middle = (left + right) / 2;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
进一步改进可以是:
您可以middle在else部分中排除,因为您已经证明它不是正确的值(right = middle;=> right = middle - 1;)
第二个else if可以替换为else.如果它不是值而不是更小,则不必测试它是否更大.
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |