c - 这个二分查找程序正确吗?

标签 c binary-search

这是我用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-1mid也将为-1。然后您将阅读vec[-1],它可能会调用未定义的行为。

而且你也不会得到正确的结果。

关于c - 这个二分查找程序正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033983/

相关文章:

javascript - 可汗学院算法挑战 : Binary Search

c - 在 C 中使用 printf 格式化二进制搜索的输出?

在C中具有不同元素大小的数组之间复制

c - LinkedList在C中删除结束

c - 选择 "leader and follower"怎么办?

java - 如何对字节数组集合进行 Collections.binarySearch ?

c - 这里出了什么问题? (空类型指针)

c - 如何将 Go 函数作为参数传递给 C 函数?

java - 在 int 数组中搜索

binary-search - D 2.0 (Phobos) 中的二分搜索?