C++实现Binary Search(二分查找)代码运行出现死循环,请问问题出在哪?
C++二分查找无限循环问题排查
存在的问题
- 缺少必要头文件
代码中使用了标准输入输出函数cin、cout,但没有引入<iostream>头文件,部分编译器会直接编译失败。 - 核心比较逻辑错误
代码中的判断条件写的是item>mid、item<mid,是把要查找的目标值和数组的下标做对比,完全不符合二分查找的逻辑,正确应该是对比目标值和arr[mid](下标mid对应的数组元素值)。 - 无异常退出机制
当前while循环仅判断arr[mid]!=item,如果查找的目标值不在数组中,start会不断右移、end不断左移,最终出现start>end的越界情况,此时循环不会自动终止,直接进入无限循环。 - 冗余计算问题
进入循环前先计算了一次mid,循环体第一行又重新计算了一次mid,属于无效的冗余代码,可直接删除进入循环前的mid赋值操作。
修正后的完整代码
#include <iostream> using namespace std; int main(){ int arr[10]={1,20,30,75,90,189,253,302,304,455}, start=0, end=9, item, mid; cin>>item; // 增加边界判断,越界说明元素不存在,直接退出循环 while(start <= end){ mid = (start + end) / 2; if(arr[mid] == item){ cout<<"Found at location : "<<mid<<endl; return 0; } // 用数组元素值和目标值做比较 else if(item > arr[mid]){ start = mid + 1; } else{ end = mid - 1; } } // 循环结束还未返回说明元素不在数组中 cout<<"Item not found in array"<<endl; return 0; }
内容的提问来源于stack exchange,提问作者T.Y.M.SAI
相关产品推荐
相关产品推荐

