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

