为什么用c语言从键盘输入一个整数然后在一个模型一维数组a【20】中,用折半查找法找出该数是数组中的第几个元素的值?

用c语言从键盘输入一个整数然后在一个模型一维数组a【20】中,用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则打印“No found”


#include <stdio.h>

int binarySearch(int arr[], int low, int high, int target) {
    while (low <= high) {
        int mid = (low + high) / 2;
        if (arr[mid] == target) {
            return mid + 1; //返回该数所在下标+1作为第几个元素的值
        } else if (arr[mid] > target) {
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    return -1; //未找到返回-1
}

int main() {
    int a[20] = {5, 9, 13, 17, 23, 40, 51, 57, 60, 64};
    int len = sizeof(a) / sizeof(a[0]);
    printf("Please input an integer: ");
    int target;
    scanf("%d", &target);

    int index = binarySearch(a, 0, len - 1, target);
    if (index == -1) {
        printf("No found");
    } else {
        printf("The number is the %dth element in the array and its value is %d\n", index, target);
    }

    return 0;
}

折半查找,必须该数组是 有序的,
举个如下例子:

#include <stdio.h>

int serach(int a[], int len, int n)
{

    int low=0, high= len-1;
    while(low<=high)
    {
        int mid=(low+high)/2;
        if(n==a[mid])
            return mid;
        else if(n < a[mid])
            high=mid-1;
        else 
            low=mid+1;
    }
    return -1;
}

int main(void)
{
    int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, n; 
    printf("请输入您要查找的数: ");
    scanf("%d",&n);
    int len = sizeof(a) / sizeof(a[0]);
    int result = serach(a, len, n);
    if (result!=-1) 
        printf("%d是数组a中的第%d个元素",n, result + 1);
    else
        printf("Not Found");
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^