#include<stdio.h>
#define Max 500000
int a[Max]; //存放数据
struct node
{
int max;
int min;
}f; //记录最大最小值,用结构体解决了返回两个值的问题
typedef struct node NODE;
int main()
{
void divide(int a[],int p,int q) ;
int n; //n个元素
int i;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
f.min=f.max=a[1]; //初始化,否则出错
divide(a,1,n);
printf("MIN: %d\n",f.min);
printf("MAX: %d\n",f.max);
}
return 0;
}
void divide(int a[],int p,int q) //从a[p]到a[q]之间寻找最大最小
{
int r;
if(q-p==0) //若分组最后只剩下一个数,则跟f的值比较
{
if(f.max<a[q])
{
f.max=a[q];
}
if(f.min>a[q])
{
f.min=a[q];
}
}
else //否则,继续分治
{
r=(p+q)/2;
divide(a,p,r);
divide(a,r+1,q);
}
}
分治求解最大最小值
最新推荐文章于 2021-07-30 09:37:39 发布