利用分治法求一组数据中最大的两个数和最小的两个数。
在这里插入代码片
#include<stdio.h>
#define N 10
void max_min(int *a,int m,int n,int *min1,int *min2,int *max1,int *max2);
int main(void)
{
int a[N]={1,3,4,5,34,7,9,6,43,21};
int min1,min2;
int max1,max2;
max_min(a,0,N-1,&min1,&min2,&max1,&max2);//这四个参数的大小关系为 min1<min2<max2<max1
printf(“min1=%d min2=%d\n max1=%d max2=%d\n”,min1,min2,max1,max2);
return 0;
}
void max_min(int *a,int m,int n,int *min1,int *min2,int *max1,int *max2)
{
int lmin1,lmin2,lmax1,lmax2;
int rmin1,rmin2,rmax1,rmax2;
int mid;
if(m==n)//分治子数组中只有一个数
{
*min1=*min2=*max1=*max2=a[m];
}
else//分治子数组中不止一个数
if(m==n-1)//分治子数组中仅有2个数
{
if(a[m]<a[n])
{
*min1=a[