我正在尝试为二进制搜索编写代码,但未显示任何输出。请告诉我我的错误。
#include <iostream>
using namespace std;
int main(){
int a[]= {1, 3, 5 , 7, 32};
int n;
cin>>n;
int last=(sizeof(a)/sizeof(a[0]))-1;
int first=0;
while(first<=last){
int mid=(last-1)/2;
if(a[mid]==n){
cout<<"No. Found"<< endl;
}
if(n>a[mid])
{
first=mid+1;
}
else
{
last=mid-1;
}
}
cout<<"Not Found"<<endl;
return 0;
}
您计算的方法mid
是错误的,应该是这样的:
int mid = (first + last) / 2;
最好的方法是这样避免溢出(first + last
可以溢出):
int mid = first + (last - first) / 2;
或与>>
运营商:
int mid = (first + last) >> 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句