#include <iostream>
using namespace std;

int bisearch(int* a,int low,int high,int h)//递归调用
{
int f = (low + high) / 2;
if (a[f] == h) return f;
else if (h < a[f]) bisearch(a, low, f - 1, h);
else if (h > a[f])bisearch(a, f + 1, high, h);
else return -1;
}

int bisearch(int* a, int high, int h)//非递归调用
{
int low=0, f;
while (low <= high)
{
f = (low + high) / 2;
if (a[f] == h) return f;
else if (h < a[f]) high = f - 1;
else low = f + 1;
}
return -1;
}

int main()
{
int n, h=1 , i = 0;
int* a;
cout << "请输入数据个数:";
cin >> n;
a = new int[n];
cout << "请按数据从小到大的顺序依次输入各数据:" ;
while (i!=n)
{
cin >> a[i];
i++;
}
while (h != 0)
{
cout << "\n请输入需要查找的数据(输入0退出):";
cin >> h;
int f = bisearch(a, n - 1, h);
if (f == -1 && h != 0)
cout << "该数据不存在!" << endl;
else if (h != 0)
cout << "该数据已找到! \n数据—》位置为:" << a[f] << "->" << f + 1 << endl;
}
return 0;
}