//二分查找
#include <iostream>
#include <algorithm>
using namespace std;
int x , n;
const int M = 10000;
int s[M];
int Search ( int n , int s[] , int x )
{
int low = 0 , high = n - 1; //初始化
while ( low <= high )
{
int mid = ( low + high ) / 2; //计算数组中心
if ( s[mid] == x ) //如果找到则返回位置
return mid;
else if ( s[mid] < x ) //如果要查找的数据比中心大
low = mid + 1; //将查找范围转移到数组右边
else //如果要查找的数据比中心小
high = mid - 1; //将查找范围转移到数组右边
}
return -2;
}
int main()
{
cin >> n;
for ( int i = 0 ; i < n ; i++ )
cin >> s[i];
sort (s , s + n);
cin >> x;
int i = Search( n , s , x );
cout << i + 1 ;
return 0;
}
递归写法
#include <iostream>
#include <algorithm>
using namespace std;
int x , n;
const int M = 10000;
int s[M];
int Search ( int n , int s[] , int x , int low , int high )
{
if ( low > high )
return -2;
int mid = ( low + high ) / 2;
if ( s[mid] == x )
return mid;
else if ( s[mid] < x )
return Search( n , s , x , mid + 1 , high);
else
return Search( n , s , x , low , mid - 1 );
}
int main()
{
cin >> n;
for ( int i = 0 ; i < n ; i++ )
cin >> s[i];
sort (s , s + n);
cin >> x;
int low = 0 , high = n - 1;
int i = Search( n , s , x , low , high );
cout << i + 1 ;
return 0;
}