小熊巨离谱 2023-07-18 21:37 采纳率: 83.9%
浏览 31
已结题

二分查找,为什么数组里面有6,但是还是会打印出notfound呢

二分查找,为什么数组里面有6,但是还是会打印出notfound呢

img

  • 写回答

4条回答 默认 最新

  • qzjhjxj 2023-07-18 22:06
    关注

    数组作为函数的形参,退化为指针,所以在int index(int a[], int target)函数里用 sizeof()得到的是一个指针的大小值,不是数组的长度值。
    修改如下,改动处见注释,供参考:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    int index(int a[], int n, int target) // 修改
    {
        int i = 0, j = n - 1;  // 修改
        while (i <= j) {
            int m = i + (j - i) / 2;
            if (a[m] > target)
                j = m - 1;
            else if (a[m] < target)
                i = m + 1;
            else
                return m;
        }
        return -1;
    }
    int main()
    {
        int a[3] = {1,3,6};
        int res = index(a, 3, 6); // 修改
        if (res != -1)
            printf("%d", res);
        else
            printf("not found");
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月29日
  • 已采纳回答 7月21日
  • 创建了问题 7月18日