数组进行二分查找法时部分数据无法被查找到

问题遇到的现象和发生背景

C语言
使用二分查找法时发现部分数字无法被找到

用代码块功能插入代码,请勿粘贴截图
#include
int search(int key, int a[], int len);
int main() {
    int a[] = { 1,2,3,4,6,8,9,13,46,78,88,99,100 };
    int key;

    printf("请输入你要搜索的数字:");
    scanf_s("%d", &key);

    int r = search(key, a, sizeof(a) / sizeof(a[0]));
    printf("该数字排在第%d位。", r);


    return 0;
}
int search(int key, int a[], int len) {
    int left = 0;
    int right = len - 1;
    int ret = -1;
    
    while(left < right) {
        int mid = (left + right) / 2;
        if (a[mid] < key) {
            left = mid + 1;
        }
        else if(a[mid]>key) {
            right = mid -1;
        }
        else {
            ret = mid;
            break;
        }
    }
    return ret;
}

运行结果及报错

输入46和100时输出的结果都为-1

while(left < right) {
改为
while(left <= right) {
就可以了

这个你可以带进去46模拟一下,最后left=7,right=8,那么加起来除以2是 7,永远不会找到,所以最后你需要判断一下left或者right指向的值等不等于46再修改ret 并返回

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^