C++实现折半查找:
一、 非递归方法进行折半查找:
#include<iostream>
using namespace std;
int main()
{
int a[100];
for (int i = 0; i < 100; i++)
{
a[i] = i + 1;
cout << a[i] << ' ';
}
cout << endl;
int front = 0, end = 100, mid = (front + end) / 2, g;
cout << "请输入要查找的数值:";
cin >> g;
if(a[mid] == g)
{
cout << "数字在第" << mid + 1 << "位" << endl;
system("pause");
return 0;
}
while (a[mid] != g)
{
if (a[mid] > g)
{
end = mid;
mid = (front + end) / 2;
}
else
{
front = mid;
mid = (front + end) / 2;
}
}
cout << "数字在第" << mid + 1 << "位" << endl;
system("pause");
return 0;
}
二、 递归法进行折半查找:
#include<iostream>
using namespace std;
int bisearch(int a[], int front, int end, int g)
{
int mid = (front + end) / 2;
if (a[mid] == g)
return mid + 1;
else if (a[mid] < g)
bisearch(a, mid, end, g);
else
bisearch(a, front, mid, g);
}
int main()
{
int a[100], loc, g;
for (int i = 0; i < 100; i++)
a[i] = i + 1;
cout << "请输入要查找的数值:";
cin >> g;
loc = bisearch(a, 0, 99, g);
cout << "目标位置在第" << loc << "位" << endl;
system("pause");
return 0;
}