《算法导论》---最大值最小值

该文介绍了如何在N个元素中同时找到最大值和最小值,通过成对比较元素,只需3*floor(N/2)次比较,优于传统的2(N-1)次比较方法。具体操作包括对每对元素进行三次比较,并根据奇偶性初始化最大值和最小值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《算法导论》—最大值最小值

  1. 在N个元素里同时找到最大值最小值,那么分别独立的找出最大值最小值,各需要N-1此比较,共2(N-1)次比较。
  2. 事实上只需要3*floor(N/2)次比较就可以得出。具体的做法就是成对地处理元素。先将一对输入元素相互比较,然后把较小的与当前最小值比较,较大的与当前最大值比较,因此每两个元素比较三次。
  3. 当n为奇数时,将最大值和最小值都设置为第一个元素值;当n为偶数时,将前两个元素较大的元素设置为最大值,较小的设置为最小值。
#include "iostream"
#include "algorithm"
using namespace std;

class Findmax_min
{
public:
	Findmax_min(int* array, int len)
	{
		this->a = array;
		this->len = len;
	}
	void Getmax_min()
	{
		int tmax, tmin; int j;
		if (len / 2 == 0)
		{
			max = a[0];
			min = a[1];
			j = 0;
		}
		else
		{
			max = min = a[0];
			j = -1;
		}

		for (int i = 2+j; i < len-1; i++)
		{
			if (a[i] > a[i + 1])
			{
				tmax = a[i];
				tmin = a[i + 1];
			}
			else
			{
				tmax = a[i+1];
				tmin = a[i];
			}
			if (tmax > max)
			{
				max = tmax;
			}
			if(min>tmin)
			{
				min = tmin;
			}
		}
		cout << "Max = " << max << " " << "Min = " << min <<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值