TuringQi 2021-09-26 19:55 采纳率: 88.2%
浏览 31
已结题

c实现 二分法查找 运行错误

运行查找4 返回-1


#include <stdio.h>
int query(int a[ ], int value){
    int low , hight ,middle;
    low=0;
    hight=sizeof(a)/sizeof(int)-1;
    while(low<=hight){
        middle=(low+hight)/2;
        if(a[middle]==value){
            return middle;
        }else if(a[middle]>value){
            hight=middle-1;        
        }else{
            low=middle+1;        
        }
    }
    return -1;    
}
int main(){
    int a[]={1,2,3,4,5,6,7,8,9};
    printf("%d",query(a,4));
} 

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-09-26 20:19
    关注

    在 query()函数里, hight=sizeof(a)/sizeof(int)-1; 这里不能得到数组的长度值。在函数里,数组的长度需通过形参传递。修改如下,供参考:

    #include <stdio.h>
    int query(int a[ ], int value,int n){
        int low , hight ,middle;
        low = 0;
        //hight=sizeof(a)/sizeof(int)-1;
        hight = n;
        while(low<=hight){
            middle=(low+hight)/2;
            if(a[middle]==value){
                return middle;
            }else if(a[middle]>value){
                hight=middle-1;
            }else{
                low=middle+1;
            }
        }
        return -1;
    }
    int main(){
        int a[]={1,2,3,4,5,6,7,8,9};
        int hight=sizeof(a)/sizeof(int)-1;
        printf("%d",query(a,4,hight));
        
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 创建了问题 9月26日

悬赏问题

  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果