二分查找C++递归实现

二分查找是一种非常高效的查找算法,时间复杂度为 O(logn) ,也就是 n = 1000 万 时只要 l o g 2 1 0 7 = 24 log _ 2 10^7 = 24 log2107=24 次,但必须是有序的数组,不能是链表,也不能是无序的数组,代码如下,其中 target 是查找的数据,输出的是 target 在数组 a 中的下标或者是 -1:

#include <bits/stdc++.h>
using namespace std;
int a[10005];
int twofenfind(int a[],int left,int right,int x)
{
	if(left>right)
		return -1;
	int mid=left+(right-left)/2;
	if(a[mid]==x)
		return mid;
	if(a[mid]>x)
		return twofenfind(a,left,mid-1,x);
	return twofenfind(a,mid+1,right,x);
}
int main()
{
	int target,n;
	cin>>target>>n;
	for(int i=1; i<=n; i++)
		cin>>a[i];
	cout<<twofenfind(a,1,n,target);
	return 0;
}