/*
二分查找 递归
*/
#include <iostream>
using namespace std;
/*迭代二分查找*/
int BinarySearch_I(int *m,const int x,const int n);
/*递归二分查找*/
int BinarySearch_R(int *a,const int x,const int left,const int right);
int main()
{
int m[] ={1,2,3,4,5,6,7,8,9};
int result;
int num =5;
if((result = BinarySearch_R(m,num,0,8))<0)
{
cout << "递归没找到"<< endl;
}
else
{
cout <<"下标 :" << result << " 值 :" << m[result] << endl;
}
if((result = BinarySearch_I(m,num,8))<0)
{
cout <<"迭代二分查找没找到" << endl;
}
else
{
cout <<"下标 :" << result << " 值 :" << m[result] << endl;
}
return 0;
}
/*迭代之二分查找*/
int BinarySearch_I(int *m,const int x,const int n)
{
int left = 0,right = n -1;
int mid;
while(left <= right)
{
int mid = (left+right)/2;
if(x<m[mid])
right = mid -1;
else if(x > m[mid])
left = mid +1;
else
return mid;
}
return -1;
}
/*递归之二分查找*/
int BinarySearch_R(int *a,const int x,const int left,const int right)
{
if(left <= right)
{
int mid = (left+right)/2;
if(x< a[mid])
return BinarySearch_R(a,x,left,mid -1);
else if(x > a[mid])
return BinarySearch_R(a,x,mid+1,right);
else
return mid;
}
return -1;
}