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

C语言二分查找首次出现位置函数调试:代码为何无法正常运行?

你的二分查找函数的问题分析

你的代码存在两个核心逻辑错误,导致无法正确找到元素首次出现的位置:

  1. 指针变量更新错误
    你在判断a[mid] < x和a[mid] > x时,错误地修改了mid变量,而非调整二分查找的边界指针:

    • 当a[mid] < x时,目标元素应该在右半区间,需要把low设为mid + 1,而不是mid = low + 1
    • 当a[mid] > x时,目标元素应该在左半区间,需要把high设为mid - 1,而不是mid = high - 1
  2. 多分支逻辑冲突
    三个if语句是独立执行的,比如第一个if修改mid后,后续if会基于修改后的mid重新判断,导致逻辑混乱。必须用else if串联条件,确保每次循环只会执行一个分支的逻辑。

修正后的代码

int firstOcc(int a[], int m, int x)
{
    int high = m - 1, low = 0, mid, index = -1;

    while (low <= high) {
        mid = low + (high - low) / 2; // 避免low+high溢出的安全写法

        if (a[mid] < x) {
            low = mid + 1;
        } else if (a[mid] > x) {
            high = mid - 1;
        } else {
            // 找到目标后,继续向左搜索更早出现的位置
            index = mid;
            high = mid - 1;
        }
    }

    return index;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:35