In a bunch of number to find out the biggest minimum value

                      问题:在一堆数中找出最大跟最小的值
如在5个整数中找出最大跟最小的值:
    算法设计:
问题可以简化为:在含n(n是2的幂(n>=2))个元素的集合中寻找极大元和极小元。用分治法(二分法)可以用较少比较次数地解决上述问题:
1)  将数据等分为两组(两组数据可能差1),目的是分别选取
    其中的最大(小)值。
2)  递归分解直到每组元素的个数≤2,可简单地找到最大(小)
    值。
3)  回溯时将分解的两组解大者取大,小者取小,合并为当前问题的解。
   

程序:
#include<stdio.h>
#define n 5
int a[n];
void maxmin(int i,int j,int *fmax,int *fmin)
{
int mid;
int lmax,lmin,rmax,rmin;
if(i==j)//问题划成一个时
{
*fmax=a[i];
*fmin=a[i];
}
else if(i==j-1)//问题划分成两个时
if(a[i]<a[j])
{
*fmax=a[j];
*fmin=a[i];
}
else {
*fmax=a[i];
*fmin=a[j];
}
//不管是一个或两个都能进行直接运算
else { //问题规模较大此时要进行分治,只有分成两个或一个时才能进行运算
mid=(i+j)/2;
maxmin(i,mid,&lmax,&lmin);//左边数据传递
maxmin(mid+1,j,&rmax,&rmin);//右边数据传递
if(lmax>rmax)
*fmax=lmax;
else 
*fmax=rmax;
if(lmin>rmin)
*fmin=rmin;
else 
*fmin=lmin;
}
}
int main()
{

int i=1;
int fmax;
int fmin;
for(;i<=5;)
{
 scanf("%d",&a[i]);
  i++;
}
maxmin(1,n,&fmax,&fmin);
printf("%d %d\n",fmax,fmin);
return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值