这是我用C写的算法:
int binfin(int vec[],int svec, int tfind) {
int left=0,right=svec-1,mid,sol=-1;
do {
mid=(left+right)>>1;
if(vec[mid]<tfind) {
left=mid+1;
} else if(vec[mid]>tfind) {
right=mid-1;
}
} while(vec[mid]!=tfind && left<=right);
if(left<=right)
sol=mid;
return sol;
}
这是我作业的一部分,但在线评判认为它不正确。
这只是程序的一个片段,尽管我相信这是造成麻烦的部分。如果正确的话请告诉我。
最佳答案
当输入中的svec
为0时会发生什么?那就是当要查找的数组为空时?
您将计算出right
为-1
,mid
也将为-1
。然后您将阅读vec[-1]
,它可能会调用未定义的行为。
而且你也不会得到正确的结果。
关于c - 这个二分查找程序正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033983/