【问题标题】:Wrong output in binary search二进制搜索中的错误输出
【发布时间】:2015-05-16 19:48:34
【问题描述】:

我正在使用二进制搜索算法在预定义的数组中查找一个数字,但如果我已经在数组中输入值,我会得到正确的答案,但是在输入不在数组中的值时,例如 101,100,121 我只是得到数字 10 作为输出

#include <stdio.h>

int binarysearch(int A[],int key);

 int main()
 {
    int key,answer;
    int A[10]={0,5,8,10,12,14,15,18,19,21};
    scanf("%d",&key);
    answer=binarysearch(A,key);
    if (answer!=-1)
    {
        printf("%d",answer);
    }
    else
    {
        puts("NOT FOUND");
    }
}

int binarysearch(int A[],int key)
{
    int i;
    int h,l,m;
    h=10;
    l=0;

    while(l<=h)
    {
        m=(h+l)/2;
        if(A[m]==key)
        {
            return m;
        }
        else if(key<A[m])
             {
                 h=m-1;
             }
             else
             {
               l=m+1;
             }
    }
    return -1;
}

【问题讨论】:

  • 请格式化您的代码,无法理解。
  • 使用h=9 而不是h=10,因为数组元素是从0n-1。即使没有更改,您的代码也适用于我。ideone.com/W6hWZI
  • @gauravsehgal 它适用于范围内的数字,但不适用于范围以上的数字。
  • 哪个号码不适合您?
  • 我又检查了一遍。我收到NOT FOUND 换成101。我哪里错了?

标签: c function sorting binary-search


【解决方案1】:

改变条件

while(l<=h)

while ( l < h )

并更改此代码 sn -p

    else if(key<A[m])
         {
             h=m-1;
         }

以下方式

    else if(key<A[m])
         {
             h = m;
         }

函数可以这样定义

int binarysearch( const int A[], int n, int key )
{
    int l = 0;
    int h = n;

    while ( l < h )
    {
        int m = ( h + l ) / 2;

        if ( A[m] == key )
        {
            return m;
        }
        else if( key < A[m] )
        {
            h = m;
        }
        else
        {
            l = m + 1;
        }
    }

    return -1;
}

并像这样称呼

answer=binarysearch( A, 10, key );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多