void maxtwo(int a[],int i, int j, int *max1, int *max2)
{
int lmax1, lmax2, rmax1, rmax2;
int mid;
if (i == j) { *max1 = a[i]; *max2 = a[i]; }
else if (i == j - 2)
{
if (a[i] >= a[i + 1] && a[i + 1] >= a[i + 2])
{
*max1 = a[i]; *max2 = a[i + 1];
}
else if (a[i] >= a[i + 2] && a[i + 2] >= a[i + 1])
{
*max1 = a[i]; *max2 = a[i + 2];
}
else if (a[i + 1] >= a[i] && a[i] >= a[i + 2])
{
*max1 = a[i + 1]; *max2 = a[i];
}
else if (a[i + 1] >= a[i + 2] && a[i + 2] >= a[i])
{
*max1 = a[i + 1]; *max2 = a[i + 2];
}
else if (a[i + 2] >= a[i] && a[i] >= a[i + 1])
{
*max1 = a[i + 2]; *max2 = a[i];
}
else{ *max1 = a[i + 2]; *max2 = a[i + 1]; }
}
else
{
mid = (i + j) / 2;
maxtwo(a,i, mid, &lmax1, &lmax2);
maxtwo(a,mid + 1, j, &rmax1, &rmax2);
if (lmax1 >= rmax1)
{
*max1 = lmax1;
if (lmax2 >= rmax2) *max2 = lmax2;
else *max2 = rmax1;
}
else
{
*max1 = rmax1;
if (rmax2 >= lmax2) *max2 = rmax2;
else *max2 = lmax1;
}
}
}
int main()
{
int i, n;
int *array;
printf("请输入数组的长度:");
scanf("%d", &n);
array = (int*)malloc(sizeof(int)* n);
printf("请输入数组内容:");
for (i = 0; i < n; i++)
{
scanf("%d", &array[i]);
}
int max1, max2;
maxtwo(array,0, n - 1, &max1, &max2);
printf("The max two elements:%d %d\n", max1, max2);