我对C ++还是陌生的,即使代码没有给出任何错误或警告它也没有在控制台中显示任何输出,我都试图实现二进制搜索。我竭尽所能,但没有发现具体原因。有人可以帮忙为什么会这样吗?谢谢。
#include <bits/stdc++.h>
using namespace std;
int binary(int arr[],int key,int low,int high)
{
int mid;
mid=(low+high)/2;
while(high>=low)
{
if(arr[mid]==key)
{
return mid;
}
else if(arr[mid]>key)
{
high=mid-1;
}
else
low=mid+1;
}
return-1;
}
int main(void)
{
std::cout<<"hello there"; // to test if at least this one gets printed.
int arr[]={1,4,5,7,8,9,10};
int key=9;
int index,low=0,high=6;
index=binary(arr,key,low,high);
std::cout <<"element is present at: "<< index << std::endl;
return 0;
}
您可以看到binary search的正确实现。
您陷入了无限循环,因为您从未在实际mid
循环内更改while
。您可以在循环开始之前将其设置为(0 + 6) / 2 == 3
,仅此而已。您应该具有:
while (high >= low) {
mid = (high + low) / 2; // line moved in from before while
if (arr[mid] == key)
: : :
[现在的方式,low
从0
更改为4
,但是由于mid
不变,因此您将永远不会检查原始mid
之外的任何元素。并且low
将始终设置为原始 mid + 1
,因此将永远位于4
。
之所以从未看到它们的第一行输出,是因为没有\n
或其他刷新机制,它仍然位于输出缓冲区中等待显示。默认情况下,如果可以确定标准输出指向交互式设备,则将对其进行行缓冲,否则将对其进行完全缓冲(有关此说明,请参见here)。