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

C++数组二分查找代码运行异常:查找不存在的key时程序卡住

C++二分查找代码异常问题定位

核心错误原因

  • 错误1:mid 计算位置错误。仅在进入while循环前计算了一次mid值,循环内部更新s、e的边界后没有重新计算mid,导致边界调整后判断逻辑永远基于最初的mid值,触发死循环。你举的测试案例中key=8大于所有数组元素,每次循环都会执行s = mid + 1,但mid永远保持初始的(0+6)/2=3,s会不断累加却永远无法触发s > e的退出条件,程序就会一直卡住无响应。
  • 错误2:右边界初始值错误。长度为n的数组合法下标范围是0 ~ n-1,初始设置e = n会导致访问arr[mid]时出现数组越界,触发未定义行为。

修复后的核心代码

int binSrch(int arr[], int n, int key)
{
    int s = 0, e = n - 1; // 修正右边界初始值
    while (s <= e)
    {
        int mid = (s + e) / 2; // 每次循环重新计算mid
        if (arr[mid] == key)
            return mid;
        else if (arr[mid] > key)
            e = mid - 1;
        else
            s = mid + 1;
    }
    return -1;
}

修复后重新编译运行,输入key=8时会正常返回-1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:27:03