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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:36:03