【问题标题】:Having problems running a simple binary search on c++在 C++ 上运行简单的二进制搜索时遇到问题
【发布时间】:2020-05-01 14:19:34
【问题描述】:

我是编程新手,现在我正在研究 c++ 上的二进制搜索。当我第一次学习它时,我运行了一个二进制搜索,它运行良好,但是自从我一直试图自己复制它以来,它一直显示“对不起,我们没有找到你的号码”,当我显示返回值时,它总是返回-1(它在循环中从未改变)。我将在下面留下代码:

int main(){

int 
numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
searchValue = 8,
returnValue = -1,
low = 0,
high = ARR_SIZE,
mid = (low + high) / 2;

while(low < high)
{
    if(numbers[mid] == searchValue)
    {
        returnValue = mid;
        break;
    }
    else if(numbers[mid] < searchValue)
    {
        low = mid + 1;
    }
    else
    {
        high = mid - 1;
    }
    mid = (low + high) / 2;
}

if(returnValue == -1)
{
    cout << "Sorry we did not find the number" << endl;
}
else
{
    cout << "We found your number! It is located at index " << returnValue << endl;
}

return 0;
}

【问题讨论】:

标签: c++ binary-search


【解决方案1】:

答案很简单:

while (low &lt; high) 替换为while (low &lt;= high)。这个对我有用。干杯!

我想感谢 Stack Overflow 的 this 线程。它帮助我了解了您代码中的问题所在。

【讨论】:

    【解决方案2】:

    假设数组长度为 ARRAY_SIZE。

    您需要将 while 循环条件更改为 while ((low &lt;= high)) 因为low &lt; high,当low==high时它不会进入循环。

    您可以添加 mid&lt;10 以避免在使用 && 时数组超出范围。 这将保存您的最后一次迭代。

    希望这会有所帮助。

    【讨论】:

    • 我应用了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2017-03-04
    • 2013-09-19
    • 2019-09-12
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多