You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我用C++编写的数组二分查找函数无法正常运行,找不到问题原因

C++二分查找代码问题修复

核心问题

  • 你的代码中mid的计算仅在while循环外执行了一次,后续调整low、high查找边界后没有重新计算当前区间的中间位置,导致判断逻辑始终基于初始的mid值,无法正确缩小查找范围,最终运行异常。
  • 补充优化建议:计算mid时可以改用low + (high - low)/2的写法,避免low+high数值过大溢出整数范围,是工程中更稳妥的实现方式。

修正后可正常运行的代码

#include <iostream>
using namespace std;

struct Array{
    int A[20];
    int length;
    int size;
};

int BinarySearch(struct Array arr,int key) {
    int low=0;
    int high=arr.length-1;
 
    while(low<=high) {
        // 每次循环先计算当前区间的中间位置
        int mid = low + (high - low)/2;
        if(key==arr.A[mid])
            return mid;
        else if(key<arr.A[mid])
            high=mid-1;
        else
            low=mid+1; 
    }    
    return -1; 
}

int main()
{
    struct Array arr={{2,3,7,12,23,34,45,56,67,78,79,90,91,111,112,334,556,778,990,999},20,20};
    cout<< BinarySearch(arr,7); 
    return 0;
}

运行说明

修正后输入查找值7,会正确输出对应下标2,符合预期。

内容的提问来源于stack exchange,提问作者ritik_dubey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:06:08