无法弄清楚二进制搜索算法出错的地方

0 c algorithm runtime-error binary-search

我在C语言上尝试了这种(二分搜索)算法,其功能是在短时间内从一堆数字中找到一个数字.这是一种非常流行的技术.您也可以在Google上阅读相关内容.对我来说,它不适用于54和35,即最后两个数组.每当我想要搜索这两个数字时,它会显示"找不到项目".对于其余的数字,即前4个数组的数组,它工作正常.

#include <stdio.h>
#include <math.h>
int main(void)
{
    int item,beg=0,end=6,mid,a[6]={10,21,32,43,54,35};
    mid=(beg+end)/2;
    mid=round(mid);
    printf("Enter the number you want to search: ");
    scanf("%d", &item);
    printf("Item you entered is %d\n",item);
    while((a[mid]!=item) & (beg<=end))
    {
        if (item<a[mid])
            end=mid-1;
        else
            beg=mid+1;
        mid=(beg+end)/2;
        mid=round(mid);
    }

    if (item==a[mid])
        printf("Your number is at location %d in array and the number is %d",mid,a[mid]);
    else
        printf("Item not found");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gsa*_*ras 5

二进制搜索需要对输入集合(在您的情况下为数组)进行排序,这不是这里的情况.

更改:

a[6] = {10, 21, 32, 43, 54, 35};
Run Code Online (Sandbox Code Playgroud)

对此:

a[6] = {10, 21, 32, 35, 43, 54};
Run Code Online (Sandbox Code Playgroud)

这是您的数组的排序版本.

而且,改变:

end=5
Run Code Online (Sandbox Code Playgroud)

对此:

end=6,
Run Code Online (Sandbox Code Playgroud)

因为在end进入循环之前,应该等于数组的大小-1,正如您在伪代码中看到的那样.


PS:这mid=round(mid);不是必需的,因为整数除法的结果也是整数.