二分法查找不到目标值(降序)

img


输入了54321,查找2但是一直显示找不到,看代码感觉没问题,应该是刚学学不精不知道哪出错了.

两个地方的问题,第11行取数组长度错误的,这里得到sz=100,第17行取 mid 的值算法错误,修改如下,供参考:

#include <stdio.h>
int main()
{
    int s[100],sz=0; //修改
    for (int i=0;i<5;sz++,i++)//修改
        scanf("%d",&s[i]);
    int n;
    scanf("%d",&n);
     //int sz=sizeof(s)/sizeof(s[0]); //修改
    int left = 0;
    int right = sz - 1;

    while (left <= right)
    {
        int mid = left + (right - left)/2;
        //int mid = (left + (right + left)/2);//修改
        if (s[mid] == n)
        {
            printf("%d %d",n , mid+1);
            break;
        }
        else if(s[mid]>n)
        {
            left = mid + 1;
        }
        else if(s[mid]<n)
        {
            right = mid -1;
        }
    }
    if (left > right)
        printf("找不到");
    return 0;
}

for循环结束后,要用getchar读入换行符
否则后面的scanf无法得到正确的值
学编程要会调试,再遇到类似的问题你首先要做的就是打印数组和n的值,看看到底里面是个什么东西

mid算错了,mid = left + (right - left) / 2