1. 程式人生 > >《演算法導論》---最大值最小值

《演算法導論》---最大值最小值

《演算法導論》—最大值最小值

  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");
}