为什么我的这个二分查找是错误的 c语言

#include <stdio.h>
int main()
{
    int n,m;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    scanf("%d",&m);
    int b[m];
    for(int t=0;t<m;t++)
    scanf("%d",&b[t]);
    int mid,h=n,l=0;

    for(int i=0;i<m;i++)
    {
        mid=n/2;
        h=n;
        l=0;
        while(1)
        {
            if(a[mid]<b[i])
            {
                l=mid;
                mid=(l+h)/2;
            }
            else if(a[mid]>b[i])
            {
                h=mid;
                mid=(l+h)/2;
            }
            printf("%d %d %d\n",mid,l,h);
            if(a[mid]==b[i])
            {
                if(i!=m-1)
                printf("%d\n",mid);
                else
                printf("%d",mid);
                break;
            }
            if(mid==l||mid==h)
            {
                if(i!=m-1)
                printf("Not found!\n");
                else
                printf("Not found!");
                break;
            }
        }

    }
}

 

h=n-1

数组从0开始算,h=n-1

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

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