jia2770909743 发表于 2021-7-7 13:25:30

二分查找


给定以下有序查找表,使用二分查找法分别查找关键字56与28是否存在于该查找表
5,9,15,18,22,25,26,38,42,45,56,56,66,69,75,78,80,83,92,99

#include <stdio.h>
typedef int ADT;

_Bool binary_search(const ADT arr[], unsigned len, ADT x)
{
        int high=len-1,low=0;
        while(low<=high)
        {
          int mid=(high+low)/2;
          if(x<arr)
          high=mid-1;
          else if(arr<x)
          low=mid+1;
          else
          return 1;
        }
        return 0;
}

int main(int argc, char *argv[])
{
        ADT array[]={5,9,15,18,22,25,26,38,42,45,56,56,66,69,75,78,80,83,92,99};
        printf("%d\n", binary_search(array, sizeof(array)/sizeof(array),56));
        printf("%d\n", binary_search(array, sizeof(array)/sizeof(array),28));
        return 0;
}

看看哪里错了呢

yinhaoyu 发表于 2021-7-7 17:37:53

我觉得int mid=(high+low)/2; 应该为 int mid = low + (high - low) / 2;

jia2770909743 发表于 2021-7-8 12:27:21

yinhaoyu 发表于 2021-7-7 17:37
我觉得int mid=(high+low)/2; 应该为 int mid = low + (high - low) / 2;

还是不太对emmmm

人造人 发表于 2021-7-8 14:50:07

这个代码有问题吗?有什么问题?

jia2770909743 发表于 2021-7-8 15:20:43

人造人 发表于 2021-7-8 14:50
这个代码有问题吗?有什么问题?

代码没问题,得到结果不对,系统判断的

人造人 发表于 2021-7-8 15:28:14

jia2770909743 发表于 2021-7-8 15:20
代码没问题,得到结果不对,系统判断的

在你那边得到了什么结果?
你认为什么结果是对的?
页: [1]
查看完整版本: 二分查找