[英]Binary Search in C - wrong exit code when integer not in the array
这个C Binary搜索函数正在寻找它应该执行的操作,但是我得到了错误:“ \\期望退出代码为1,而不是0”,如果它要查找的整数不在数组中。 我试图在最后删除false或删除else语句,但这不起作用。 谁能看到原因?
bool search(int value, int values[], int n)
{
int min = 0;
int max = n-1;
int mid = (max + min) / 2;
if(n <= 0)
{
return false;
}
while (values[max] >= values[min])
{
if (values[mid] == value)
{
return true;
}
else if (values[mid] > value) //value's on the left of mid
{
min = 0;
max = mid - 1;
return true;
}
else if (values[mid] < value) //value's on the right of mid
{
max = n-1;
min = mid + 1;
return true;
}
else
{
return false;
}
}
return false;
}
我只是将代码修改为以下代码,并获得了完全相同的结果。 以为这样可以缩小问题的范围。
bool search(int value, int values[], int n)
{
int min = 0;
int max = n-1;
int mid = (max + min) / 2;
if(n <= 0)
{
return false;
}
if (values[max] >= values[min])
{
if (values[mid] == value)
{
return true;
}
else if (values[mid] > value) //value's on the left of mid
{
min = 0;
max = mid - 1;
return true;
}
else if (values[mid] < value) //value's on the right of mid
{
max = n-1;
min = mid + 1;
return true;
}
else
{
return false;
}
}
else
{
return 1;
}
}
注意,正确和错误的返回码取决于上下文。
在C中-False被认为只是数字0,True是不为0的任何东西。
在Linux中-谈论进程的返回码(或退出码)是相反的。 True仅是0(表示正常退出),而False则不是0(表示退出带有某些错误,取决于代码)。
另外 :您还有一个逻辑错误- search
功能代码无法正常工作。 当您检查值是在mid
值的左侧还是右侧时:
min
(在左侧检查中)和max
(在右侧检查中)。 您总是将它们更新为第一个/最后一个索引,这是错误的。 每次迭代,您要搜索的范围应该比上一个范围缩小一半。 在您的帮助下,我终于有了赢家。 看来我需要从“ while”语句中删除数组名称(values []); 而且我还必须在每个'if / if else'语句中引用“ int mid =(min + max)/ 2”。 感谢大家。 唷!
bool search(int value, int values[], int n) //values = the array
{
int min = 0;
int max = n - 1;
while (min <= max)
{
int mid = (min + max) / 2;
if (values[mid] == value)
{
return true;
}
else if (value < values[mid]) //value's on the left of mid
{
max = mid - 1;
}
else if (value > values[mid]) //value's on the right of mid
{
min = mid + 1;
}
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.