用于检查给定数字是否存在于具有所有数字的数组中的程序

时间:2018-03-15 17:55:25

标签: c arrays function

以下C程序工作正常但不适用于位于零位置或小于零位置值的值。这个程序基本上取一个值并检查给定值是否在数组中。它首先将给定值与数组的中间值进行比较,并确定它是否匹配它,或者是在上半部分还是下半部分然后继续进入选定的一半,并以类似的方式进行,直到它获得值或范围出现为零。但是在这里它没有显示任何结果只是屏幕上闪烁的光标(如果零位置的值或小于该位置的值)。

#include<stdio.h>
main()
{
    int n, x,b;
    int s[]= {2,3,7,9,33,58};
    n=6;
    printf("Enter the number which we want to find in the array ");
    scanf("%d",&x);
    b=binsearch(n, s, x);
    printf("The position is: %d",b);
}
int binsearch(int n, int v[], int x)
{
    int low, high, mid;
    low=0;
    high= n-1;
    while(low<=high)
    {
        mid=(low+high)/2;
        if (x<v[mid])
            high=mid+1;
        else if (x>v[mid])
            low=mid+1;
        else
            return mid;
    }
    return -1;
}

如果我们进行以下更改,那么程序会给出相同的问题,但是对于最后一个位置或更大的值。

#include<stdio.h>
main()
{
    int n, x,b;
    int s[]= {2,3,7,9,33,58};
    n=6;
    printf("Enter the number which we want to find in the array ");
    scanf("%d",&x);
    b=binsearch(n, s, x);
    printf("The position is: %d",b);
}
int binsearch(int n, int v[], int x)
{
    int low, high, mid;
    low=0;
    high= n-1;
    while(low<high)
    {
        mid=(low+high)/2;
        if (x<v[mid])
            high=mid;
        else if (x>v[mid])
            low=mid;
        else
            return mid;
    }
    return -1;
}

1 个答案:

答案 0 :(得分:0)

最好修改二进制搜索功能,将lowhigh作为参数而不是n

int binsearch(int v[], int low, int high, int x)
{
    int mid=(low+high)/2;
    if(low<=high)
    {
        if (x<v[mid])
            high=mid-1;
        else if (x>v[mid])
            low=mid+1;
        else
            return mid;
        return binsearch(v, low, high, x);
    }
    return -1;
}

如果x等于v[mid],则会返回mid

如果x低于中间值,则high成为mid-1,如果x高于中间值,则low成为mid+1 { {1}}因此,正在考虑阵列当前部分的一半。

binsearch()是一个递归函数,在low>high之前一直被调用。

如果找到匹配项,函数将返回位置,否则返回-1