《算法导论》—最大值最小值
- 在N个元素里同时找到最大值最小值,那么分别独立的找出最大值最小值,各需要N-1此比较,共2(N-1)次比较。
- 事实上只需要3*floor(N/2)次比较就可以得出。具体的做法就是成对地处理元素。先将一对输入元素相互比较,然后把较小的与当前最小值比较,较大的与当前最大值比较,因此每两个元素比较三次。
- 当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");
}