LHdrogen
液氢
采纳率100%
2019-11-07 14:19

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

已采纳

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

//二分法查找
#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条回答

  • xianfajushi 智者知已应修善业 2年前
        //二分查找 升序数组------前面正确的就不重复了,直接用升序数组
        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 评论 复制链接分享
  • weixin_39815001 想出家的霸天虎 2年前
    点赞 评论 复制链接分享