// 輸入:先輸入進行二分搜索元素的個數,然後按大小依次輸入(或隨機生成,然後排序)每個數字,最後輸入要求搜索的元素。
輸出:要求搜索元素的下標(下標從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;
}