鱼C论坛

 找回密码
 立即注册
查看: 3188|回复: 5

二分查找

[复制链接]
发表于 2021-7-7 13:25:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

给定以下有序查找表,使用二分查找法分别查找关键字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[mid])
            high=mid-1;
            else if(arr[mid]<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[0]),56));
        printf("%d\n", binary_search(array, sizeof(array)/sizeof(array[0]),28));
        return 0;
}

看看哪里错了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-7 17:37:53 | 显示全部楼层
我觉得int mid=(high+low)/2; 应该为 int mid = low + (high - low) / 2;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-8 12:27:21 | 显示全部楼层
yinhaoyu 发表于 2021-7-7 17:37
我觉得int mid=(high+low)/2; 应该为 int mid = low + (high - low) / 2;

还是不太对emmmm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-8 14:50:07 | 显示全部楼层
这个代码有问题吗?有什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-8 15:20:43 | 显示全部楼层
人造人 发表于 2021-7-8 14:50
这个代码有问题吗?有什么问题?

代码没问题,得到结果不对,系统判断的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-8 15:28:14 | 显示全部楼层
jia2770909743 发表于 2021-7-8 15:20
代码没问题,得到结果不对,系统判断的

在你那边得到了什么结果?
你认为什么结果是对的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表