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

C语言实现O(log n)复杂度升序数组二分查找代码错误排查求助

二分查找代码问题排查

你的代码存在三处核心错误,分别如下:

  • mid值计算逻辑错误:你编写的(l + (r-l))/2等价于l,完全没有计算到数组中间位置,正确的mid计算应该是l + (r - l) / 2,用来避免两数直接相加溢出的同时得到正确中间下标。
  • 匹配到目标值时返回值错误:需求要求返回目标值的下标,你返回的是nums[mid]也就是数组存储的目标值本身,此处应该直接返回下标mid。
  • 边界调整时错误添加了return语句:调整左边界l = mid + 1和右边界r = mid -1时你直接加了return,会导致循环仅执行一次就直接退出,无法完成后续二分查找流程,需要删除这两处的return。

修正后可正常运行的代码

int search(int* nums, int numsSize, int target){
    int l = 0;
    int r = numsSize - 1;
    
    while(l <= r)
    {
        int mid = l + (r - l) / 2;
        if(nums[mid] == target)
            return mid;
        else if(nums[mid] < target)
            l = mid + 1;
        else
            r = mid - 1;
    }
    return -1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:45:05