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

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

  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 << endl;
	}
private:
	int *a, len;
	int max, min;
};


void main()
{
	int a[] = { 3,1,-1,0,3,9 };
	int len = sizeof(a) / sizeof(a[0]);
	Findmax_min f(a, len);
	f.Getmax_min();
	system("pause");
}

猜你喜欢

转载自blog.csdn.net/weixin_42809993/article/details/84583940