液氢 2019-11-07 14:19 采纳率: 100%
浏览 375
已采纳

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

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

//二分法查找
#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;
}

图片说明

  • 写回答

2条回答 默认 最新

  • 智者知已应修善业 2019-11-07 21:53
    关注
        //二分查找 升序数组------前面正确的就不重复了,直接用升序数组
        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("未找到");
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站