//---------------------------------------------
//
Author
:心海
//
Date
:2013-11-17
//
Blog
:http://blog.sina.com.cn/u/2116533530
//
Copyright :anyone
//
PS
:欢迎拍砖、指正。一起学习,共同进步。
//-----------------------------------------------
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;
//查找最大值
//比较次数为n
template<class
T>
T FindMax(T A[],int left,int right)
{
T max =
A[left];
for(int
i=left+1;i<=right;i++)
if(max<A[i])
max = A[i];
return
max;
}
//查找最小值
//比较次数为n
template<class T>
T FindMin(T A[],int left,int right)
{
T min =
A[left];
for(int
i=left+1;i<=right;i++)
if(min>A[i])
min = A[i];
return
min;
}
//查找最大值,最小值
//比较次数为1.5N
template<class T>
void FinMaxMin(T A[],int left,int right,T&
max,T& min)
{
if((right-left+1)%2==0)
//偶数情况
{
max = A[0]>A[1]?A[0]:A[1];
min = A[0]<A[1]?A[0]:A[1];
for(int
i=left+2;i<right;i=i+2)
{
if(A[i]>A[i+1])
{
if(A[i]>max)
max = A[i];
if(A[i+1]<min)
min = A[i+1];
}
else
{
if(A[i+1]>max)
max = A[i+1];
if(A[i]<min)
min = A[i];
}
}
}
else
//奇数个数情况
{
max=min=A[left];
for(int
i=left+1;i<right;i=i+2)
{
if(A[i]>A[i+1])
{
if(A[i]>max)
max = A[i];
if(A[i+1]<min)
min = A[i+1];
}
else
{
if(A[i+1]>max)
max = A[i+1];
if(A[i]<min)
min = A[i];
}
}
}
}
int main()
{
int
A[100];
srand(time(NULL));
for(int
i=0;i<100;i++)
A[i] = rand()0;
A[99]=0;
for(i=0;i<100;i++)
{
cout<<setw(3)<<setiosflags(ios::right)<<A[i];
if((i+1)==0)
cout<<endl;
}
int
max,min,m=0,n;
max =
FindMax(A,0,99);
min =
FindMin(A,0,99);
cout<<endl<<max<<"
"<<min<<endl;
FinMaxMin(A,0,99,m,n);
cout<<endl<<m<<"
"<<n<<endl;
return
0;
}