二分法查找升序一维数组,结果不对

先学的数组,没学函数,论坛上带函数的二分法不大看得懂,不用函数进行查找结果总是不对,请帮忙指正错误,感谢

//二分法查找
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
    int n,i,box,j;
    printf("请输入数组长度:");
    scanf("%d",&n);
    int a[n];
    srand(time(NULL));
    for(i=0;i<n;i++)
        a[i]=rand()%90+10;
    printf("数组如下:\n");
    for(i=0;i<n;i++)
        {
            printf("%-3d",a[i]);
        }//赋值并打印数组
        printf("\n\n排序后如下:\n");
    for(i=0;i<=n;i++)//冒泡排序
    {
        for(j=0;j<=n-i-2;j++)
            {
                if(a[j]>a[j+1])
            {
                box=a[j];
                a[j]=a[j+1];
                a[j+1]=box;
            }
            }
    }
    for(i=0;i<n;i++)
        {
            printf("%-3d",a[i]);
        }//打印排序后数组
//二分查找 升序数组
    int left,right,mid,times=0,k,x;
    left=0,right=n-1;
    printf("\n\n请输入需要查找的数:\n");
    scanf("%d",x);
    for(k=0;k<n;k++)
    {
        mid=(left+right)/2;
        times++;
        printf("mid=%d times=%d\n",mid,times);
        if(x>a[mid])
            left=mid+1;
        else if(x<a[mid])
            right=mid-1;
        else if(x==a[mid])
            {printf("所找的数是第%d个,为%d",mid+1,a[mid]);//0~9排序a[0]是第1个数;下标与个数差1
            break;}
    }
    if(times==n)
            printf("未找到");
    return 0;
}

图片说明

    //二分查找 升序数组------前面正确的就不重复了,直接用升序数组
    int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    int left=0, right=0, mid, times = 0, k, x=0,n=11;
    printf_s("\n\n请输入需要查找的数:\n");
    scanf_s("%d", &x);
        right = n - 1;
    for (k = 0; k<n; k++)
    {
        mid = (left + right) / 2;
        times++;
        printf_s("mid=%d times=%d\n", mid, times);
        if (x>a[mid])
            left = mid + 1;
        else if (x<a[mid])
            right = mid - 1;
        else if (x == a[mid])
        {
            printf_s("所找的数是第%d个,为%d", mid + 1, a[mid]);//0~9排序a[0]是第1个数;下标与个数差1
            break;
        }
    }
    if (times == n)
        printf_s("未找到");

常用查找算法可参考 https://blog.csdn.net/weixin_39815001/article/details/93737617