二进制搜索中的输出错误

时间:2015-05-16 19:48:34

标签: c function sorting binary-search

我正在使用二进制搜索算法在预定义数组中找到一个数字,但是如果我输入数组中的值我得到了正确的答案,但在输入的数值不是像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;
}

1 个答案:

答案 0 :(得分:0)

更改条件

while(l<=h)

while ( l < h )

并更改此代码段

    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 );