gpt4 book ai didi

c - 在 C 中实现二进制搜索

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:17 24 4
gpt4 key购买 nike

关于实现二进制搜索的快速问题 :-)。这是我现在拥有的功能,我还没有完全弄清楚为 i 传递正确数字的逻辑。然而,当我调试这个函数时,我发现当 value = values[i] (match) 时,发生了意想不到的行为。

我的意图是返回 true,从而触发匹配并退出函数。实际行为导致 return true; 然后返回false; (错误地)。有谁知道如何确保 return true;退出功能?或者指导我犯错的提示?非常感谢!

bool search(int value, int values[], int n){

int i = ((n - 1) / 2);

if(value == values[i])
{
return true;
}
else if(value < values[i])
{
n = i;
search(value, values, n);
}
else if(value > values[i])
{
n = (i * 1.5);
search(value, values, n);
}
return false;
}

最佳答案

您缺少几个 return 关键字。

search(value, values, n);

应该是:

return search(value, values, n);

有两条这样的线。

如果没有那些 return 关键字,该函数总是会结束并返回 false

更新,回应 OP 的评论

您的函数没有任何检查来确保 values 不会越界访问。我认为它永远不会尝试访问具有负索引的任何内容,但它有机会访问索引高于允许索引值的元素。我建议更改要使用的功能:

int search(int value, int values[], int start, int end)
{
if ( start >= end )
{
return 0;
}

int mid = (start + end)/2;

if(value < values[mid])
{
return search(value, values, start, mid);
}
else if(value > values[mid])
{
return search(value, values, mid+1, end);
}
else
{
return (value == values[mid]);
}
}

并在从函数外部调用时使用正确的 startend 值调用它。

int values[] = {1, 4, 6, 8};
bool found = search(2, values, 0, sizeof(values));

关于c - 在 C 中实现二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33836472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com