第6章 函数 第25题

题目:

设计一个基于分治法的函数,找出一组整型数中的最大值。


代码:

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值