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

Binary Search函数返回-1但目标元素存在于数组中的问题排查

二分查找函数存在的问题及修复方案

你的代码里有两个关键错误,导致目标元素存在时仍返回-1:

  • 右边界初始化错误:你把搜索范围的右边界e初始成了0,正确的右边界应该是数组最后一个元素的索引n-1,否则初始搜索范围只包含第一个元素,根本没覆盖整个数组。
  • mid值未在循环内更新:你只在函数开头计算了一次mid,但每次调整左边界s或右边界e后,都需要重新计算mid,否则会一直用初始的mid值(这里初始是0),无法正确缩小搜索范围。

修正后的完整代码:

#include<iostream>
using namespace std;

int binarysearch(int arr[],int n, int key){
    int s=0;
    int e = n-1; // 修正右边界

    while (s<=e)
    {
        int mid = (s+e)/2; // 每次循环重新计算mid
        if(arr[mid]==key){
            return mid;
        }
        else if(arr[mid]<key){
            s=mid+1;
        }
        else{
            e=mid-1;
        }
    }
    return -1;
}

int main (){
    int n;
    cout<<"Enter array size :";
    cin>>n;

    int arr[n];

    for(int i=0; i<n; i++){
        cin>>arr[i];
    }

    int key;
    cout<<"Enter key :";
    cin>>key;

    cout<<binarysearch(arr,n,key)<<endl;
}

测试你给出的案例:输入数组大小5,数组元素[2,3,6,9,12],目标元素3,现在会正确返回索引1。

内容的提问来源于stack exchange,提问作者Coding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:35:29