我正在使用二进制搜索算法在预定义的数组中查找数字,但是如果我已经在数组中输入值,我将得到正确的答案,但是在不在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 已采纳

改变条件

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

  ask by ibadia translate from so

未解决问题?本站智能推荐:

3回复

用C中的指针进行二进制搜索

我被要求编写一些特定条件的二进制搜索程序。 我必须传递下限,上限,指向数组的指针和搜索元素。 我编写的程序给了我警告。 我无法纠正程序中的错误。 请指出我错了。 编译时收到此警告。 当我删除行*p = a[0]; ,然后收到以下错误消息: 当我运行该程序时,该程
1回复

如何在C中的2个排序数据表上使用二进制搜索

我正在研究如何在C语言中使用二进制搜索。 我将从开始 我有一个结构 如您所见,这是一个具有2个short数组的结构,可以容纳2个short值。 然后我将内存分配给这些结构。 这使我可以在内存中存储许多这种类型的结构。 我经历了一些循环,并用struct key
2回复

二进制搜索(递归实现)

这个问题已经在这里有了答案: 函数返回值,没有返回语句 5个答案 我不得不在递归中编写二进制搜索代码。 我首先想说一下: 而且工作完美。 但是在搜索之后,我明白我必须编写如下代码: 因为在第一个代码中我们可能没有返回值。 我的问题是为什么第一
1回复

递归二进制搜索函数缺少什么? (C)

我正在尝试创建一个在排序数组上进行二进制搜索的函数。 我检查了一切,一切正常,除了一件事: 如果我没有在函数的末尾放置一个return语句,而不是被If包围,它将不会构建我的程序。 如果我把'return 0',它总是会返回0,无论如何。 如果我对1做同样的事情,它总会返回1,我看不
1回复

将字符串存储在二进制文件中,同时保持它们按字母顺序排序

因此,假设我有一个C程序将字符串存储到二进制文件中。 然后在另一个二进制文件中,保存每个字符串的第一个字节的位置。 例如。 words.bin包含:alphacardelta pos.bin包含:0 5 8 我想插入“ beta”,并使它介于alpha和car之间。 虽然
1回复

在ArrayList(Java)中搜索一个键的总和

我需要搜索ArrayList中是否有两个数字的总和,它们对应于传递给该方法的给定数字X。 我在两个不同的文件中有这些数字-一个包含数字,另一个包含密钥。 我要做的是: -用这些数字填充2个不同的ArrayList -用我必须搜索总数的数字排序,以便排序 然后我不知道
4回复

在C中严格执行下限

我想出了这个解决方案来在排序数组中严格实现下限: 但这似乎不起作用。 在某些测试案例中,它失败了。 例如: A [7] = {0,1,1,3,5,5,10} 键= 4 它进入无限循环。 这是测试运行: 第一次迭代后:低= 3,高= 7,中= 3 第
1回复

二进制搜索小错误Python 3.5

我正在为课程创建二进制搜索。 根据值是否在列表中,它应该显示True或False 。 到目前为止,我无法获得没有错误的最后一个元素: 这一行: last = len(alist)-1无法识别列表中的最后一个元素? 它转到最后一个,因此,如果我运行上面的代码,则应在返回Tru
1回复

二进制搜索CompareTo Java

我正在尝试在对象数组上使用二进制搜索。 我使用object是因为对于一个实例,我可能有一组字符串或ints 。 我目前停留在实现我的compareTo方法,还不确定下一步是什么。 这是我到目前为止的内容- 我在调用binarySearch时显示一个错误,它说的是FiveThree类
1回复

C语言二进制搜索中的分割错误

我正在尝试编写一个程序来扫描一个输入文件,该文件包含数组中字母的数量,字母的排序列表,要搜索的字母数量,要搜索的字母列表。 它以示例文件中显示的格式显示搜索结果。 我在运行时收到分段错误错误消息,并包含下面包含的代码。 现在,在此帖子因未包含正确数量的代码而获得负面反馈之前,我真的不知