算法导论第9章(o(3n/2)时间内找出最大最小值)

时间:2021-11-30 17:20:50
#include <iostream.h>
#include <limits.h> //包含INT_MAX,INT_MIN的头文件

int nMax = INT_MIN; //将INT_MIN设为当前最大值的初始值
int nMin = INT_MAX;
/////记录比较最大值函数
void Max(int& nNum)
{
nMax = nNum > nMax ? nNum : nMax ;
}
/////记录比较最小值函数
void Min(int& nNum)
{
nMin = nMin < nNum ? nMin : nNum;
}
void Max_Min(int nData[],int nLen)
{
if (nLen%2 == 1) //待测数据为奇数
{
//待测数据为奇数,最值初始值均设为nData[0]
Max(nData[0]);
Min(nData[0]);

for (int i=1;i<=(nLen-1)/2;i++)
{
if (nData[i]>nData[nLen-i])
{
Max(nData[i]);
Min(nData[nLen-i]);
}
else
{
Max(nData[nLen-i]);
Min(nData[i]);
}
}
}
else //待测序列为偶数
{
for (int i=0;i<nLen/2;i++)
{
if (nData[i]>nData[nLen-i-1])
{
Max(nData[i]);
Min(nData[nLen-i-1]);
}
else
{
Max(nData[nLen-i-1]);
Min(nData[i]);
}
}
}
}
void main()
{
//测试序列
int nData[] = {3,2,5,9,5,2,1,13,0,-1,43};
int nLen = sizeof(nData)/sizeof(nData[0]);
Max_Min(nData,nLen);


cout<<"nMax = "<<nMax<<endl<<"nMin = "<<nMin<<endl;
}