【问题标题】:Why is my code for binary search not working?为什么我的二进制搜索代码不起作用?
【发布时间】:2023-02-05 22:48:37
【问题描述】:

该代码不会在最左边或最右边的位置打印元素的位置。我已经看了好几个小时了,请帮我找出问题所在。

type here
#include<stdio.h>
#define max 50

void binarysearch(int l,int r,int key,int num[])
{
    int mid=(l+r)/2;
    if(num[mid]==key)
    {
        printf("Element found at location %d",mid+1);return;
    }
    else if(num[mid]<key)
    {
        return binarysearch(l,mid-1,key,num);
    }
    else
    {
        return binarysearch(mid+1,r,key,num);
    }
    printf("Element not found ");return;
}

int main()
{
    int i,key,size,num[max];
    printf("Enter size of array : ");scanf("%d",&size);
    for(i=0;i<size;i++)
    {
        printf("Enter the element : ");scanf("%d",&num[i]);fflush(stdin);
    }
    printf("Enter key to search : ");scanf("%d",&key);
    binarysearch(0,size-1,key,num);
    return 0;
}

我要发疯了。发送帮助

【问题讨论】:

  • 您应该检查特殊情况,例如: r<l, r==l, r==l+1 。
  • 永远无法达到“找不到元素”打印。

标签: c if-statement recursion binary-search function-definition


【解决方案1】:

对于初学者,您需要在函数内检查r 是否不小于l。如果没有这个检查,函数可以调用未定义的行为。

这些 if 语句不正确

else if(num[mid]<key)
{
    return binarysearch(l,mid-1,key,num);
}
else
{
    return binarysearch(mid+1,r,key,num);
}

例如,如果 num[mid] 小于 key 那么您需要递归调用该函数,例如

return binarysearch(mid+1, r, key,num);

否则喜欢

return binarysearch(1, mid-1,key,num);

注意该函数不应输出任何消息。如果在数组中找不到搜索到的值,它应该返回给调用者找到的元素的索引或者例如 -1。由函数的调用者决定是否输出消息。

至少像这样声明函数会好得多

int binarysearch( const int num[], int size, int key );

或者喜欢

int * binarysearch( const int num[], size_t size, int key );

对于最后的声明,该函数返回指向找到的元素或 NULL 的指针。

还有这个电话

fflush(stdin);

有未定义的行为。

【讨论】:

    【解决方案2】:

    您只是在相反的地方编写了代码。

    正确的代码是:

    #include<stdio.h>
    #define max 50
    
    void binarysearch(int l,int r,int key,int num[])
    {
        int mid=(l+r)/2;
        if(num[mid]==key)
        {
            printf("Element found at location %d",mid+1);return;
        }
        else if(num[mid]<key)
        {
            // Wrong Code
            // you've done the opposite operation
            //return binarysearch(l,mid-1,key,num);
    
            // Correct Code
            return binarysearch(mid+1,r,key,num);
        }
        else
        {
            // Wrong Code
            // same problem as before.. you've done opposite operation
            //return binarysearch(mid+1,r,key,num);
    
            // Correct Code
            return binarysearch(l,mid-1,key,num);
        }
        printf("Element not found ");return;
    }
    
    int main()
    {
        int i,key,size,num[max];
        printf("Enter size of array : ");scanf("%d",&size);
        for(i=0;i<size;i++)
        {
            printf("Enter the element : ");scanf("%d",&num[i]);fflush(stdin);
        }
        printf("Enter key to search : ");scanf("%d",&key);
        binarysearch(0,size-1,key,num);
        return 0;
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      相关资源
      最近更新 更多