我用C++编写的数组二分查找函数无法正常运行,找不到问题原因
C++二分查找代码问题修复
核心问题
- 你的代码中
mid的计算仅在while循环外执行了一次,后续调整low、high查找边界后没有重新计算当前区间的中间位置,导致判断逻辑始终基于初始的mid值,无法正确缩小查找范围,最终运行异常。 - 补充优化建议:计算
mid时可以改用low + (high - low)/2的写法,避免low+high数值过大溢出整数范围,是工程中更稳妥的实现方式。
修正后可正常运行的代码
#include <iostream> using namespace std; struct Array{ int A[20]; int length; int size; }; int BinarySearch(struct Array arr,int key) { int low=0; int high=arr.length-1; while(low<=high) { // 每次循环先计算当前区间的中间位置 int mid = low + (high - low)/2; if(key==arr.A[mid]) return mid; else if(key<arr.A[mid]) high=mid-1; else low=mid+1; } return -1; } int main() { struct Array arr={{2,3,7,12,23,34,45,56,67,78,79,90,91,111,112,334,556,778,990,999},20,20}; cout<< BinarySearch(arr,7); return 0; }
运行说明
修正后输入查找值7,会正确输出对应下标2,符合预期。
内容的提问来源于stack exchange,提问作者ritik_dubey
相关产品推荐
相关产品推荐

