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

