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
相关产品推荐
相关产品推荐

