// 输入:先输入进行二分搜索元素的个数,然后按大小依次输入(或随机生成,然后排序)每个数字,最后输入要求搜索的元素。
输出:要求搜索元素的下标(下标从0开始!)。
示例:输入:6 1 5 5 6 9 9 6,输出3
#include <iostream>
using namespace std;
//递归
int search(int arr[],int l,int r,int key)
{
int min = (l + r) / 2;
if (key==arr[min])
{
return min;
}
else if (key<arr[min])
{
return search(arr,l,min-1,key);
}
else if (key>arr[min])
{
return search(arr, min + 1, r, key);
}
else
{
return -1;
}
}
//非递归
/*int search(int arr[], int l, int r, int key)
{
while (l<=r)
{
int min = (l + r) / 2;
if (key == arr[min])
{
return min;
}
else if (key<arr[min])
{
r = min - 1;
}
else if (key>arr[min])
{
l = min + 1;
}
else
{
return -1;
}
}
}*/
int main()
{
int n;//个数
cin >> n;
int *arr = new int[n];//大小为n的数组
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
int key;//要搜索的元素
cin >> key;
cout<<search(arr,0,n-1,key);
delete[] arr;
return 0;
}