折半查找(递归和非递归)
#include<iostream>
using namespace std;
int Bisearch(int a[], int n, int k)//非递归
{
int low = 0, high = n - 1,mid;
while (low < high)
{
mid = (low+high) / 2;
if (a[mid] == k)
return mid;
else if (a[mid] < k)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
int Bisearch2(int a[], int n, int k)//非递归
{
int low = 0, high = n - 1, mid;
while (low < high)
{
mid = (low + high) / 2;
if (a[mid] == k)
return mid;
else if (a[mid] < k)
return Bisearch2(a, mid + 1, k);
else
return Bisearch2(a, mid -1, k);
}
return -1;
}
int main()
{
cout << "请输入一个序列,以9999作为结束标志:";
int a[100], i = 0,n=0;
while (1)
{
cin >> a[i];
if (a[i] == 9999)break;
else
{
i++; n++;
}
}
//cout << n<<endl;
cout << "请输入要查找的值:";
int k; cin >> k;
cout << endl << "使用非递归方式查找,请输出此值的下标:"<< Bisearch(a,n,k);
cout << endl << "使用递归方式查找,请输出此值的下标:" << Bisearch2(a, n, k);
return 0;
}