分治求解最大最小值

#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);			
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值