题目:
设计一个基于分治法的函数,找出一组整型数中的最大值。
代码:
#include <iostream>
using namespace std;
int divide(int *a, int low, int high, int n);
int main()
{
cout << "设计一个基于分治法的函数,找出一组整型数中的最大值" << endl << endl;
int n, i;
cout << "请输入这组整型数的数量:";
cin >> n;
int *a = new int[n];
cout << "请输入这组整型数:(彼此之间用空格隔开,按回车键结束)" << endl;
for (i = 0; i < n; ++i) cin >> a[i];
int low = 0, high = n - 1;
divide(a, low, high, n);
cout << endl << "这组整型数从小到大的排序为:";
for (i = 0; i < n; ++i) cout << a[i] << " ";
cout << endl << "其中最大的数为:" << a[n - 1] << endl << endl;
system("pause");
return 0;
}
int divide(int *a, int low, int high, int n)
{
int tmp = a[low];
bool judge = true;
while (low < high)
{
//从右到左
while ((low < high)&(a[high] >= tmp)) --high;
if ((low < high)&(a[high] < tmp))
{
a[low] = a[high];
++low;
judge = false;
}
//从左到右
while ((low < high)&(a[low] <= tmp)) ++low;
if ((low < high)&(a[low] > tmp))
{
a[high] = a[low];
--high;
judge = false;
}
}
a[low] = tmp;
if (judge == false)
{
divide(a, 0, low - 1, n);
divide(a, low + 1, n - 1, n);
}
else return *a;
}