题目描述
上机练习6.3.7 用递归算法实现二分查找,即:有n个已经从小到大排序好的数据(不重复),从键盘输入一个数X,用对半查找方法,判断它是否在这n个数中。
输入
第一行,正整数n,N<=105;
第二行,n个整数(int范围内,不重复),中间用空格分隔;
第三行,整数X。
输出
如果找到X,输出其位置;否则输出-1。
样例输入
10
10 20 30 40 50 60 70 80 90 100
90
样例输出
9
来源
基本算法-递归
C++
#include <bits/stdc++.h>
using namespace std;
int binarySearch(int a[],int l,int r,int v) {
if(l>r)
return -1;
int mid = (l+r)/2;
if(a[mid]==v)
return mid;
if(a[mid]>v) {
binarySearch(a,l,mid-1,v);
}
if(a[mid]<v) {
binarySearch(a,mid+1,r,v);
}
}
int main() {
int n,value;
cin>>n;
int a[n+1];
for(int i=1; i<=n; i++) {
cin>>a[i];
}
cin>>value;
cout<<binarySearch(a,1,n,value)<<endl;
return 0;
}