采用分治法思想,分别找出每个小组的最大值和次大值,在进行比较。但是当遇到一个小组中只有一个数的情况处理起来比较复杂。
因此,对于数组长度为奇数的情况分开考虑,保留最后一位数,单独比较
#include <iostream>
using namespace std;
void finMax_Max2(int* arr ,int begin ,int end, int &Max ,int &Max2)
{
if(end-begin<1)
{
exit(1);
}
bool flag = false;
int last;
if((end - begin +1)%2 == 1)
{
flag = true;
last = arr[end];
end--;
}
if(begin +1 == end)
{
if(arr[begin] > arr[end])
{
Max = arr[begin];
Max2 = arr[end];
}
else
{
Max2 = arr[begin];
Max = arr[end];
}
}
else
{
int leftMax,leftMax2,rightMax,rightMax2;
int mid = begin +( end -begin )/2;
finMax_Max2( arr ,begin ,mid, leftMax ,leftMax2);
finMax_Max2( arr ,mid+1 ,end, rightMax ,rightMax2);
if(leftMax>rightMax)
{
Max = leftMax;
if(leftMax2>rightMax)
Max2 = leftMax2;
else
Max2 = rightMax;
}
else
{
Max =rightMax;
if(rightMax2>leftMax)
Max2 = rightMax2;
else
Max2 = leftMax;
}
}
if(flag)
{
if(last>Max)
{
Max2 = Max;
Max = last;
}
else if(last>Max2 )
{
Max2 = last;
}
}
}
void main()
{
int a[7]={1,2,1213,24};
int max,max2;
finMax_Max2(a,0,3,max,max2);
cout<< max2;
system("pause");
}