分治算法的一个小问题,求一个数组的最大最小值,算法如图,怎么实现?求指教

如果设一个maxmin函数,要返回两个值,不行,不知道要怎么实现,小弟只会c语言跟一点java... 如果设一个maxmin函数,要返回两个值,不行,不知道要怎么实现,
小弟只会c语言跟一点java
展开
 我来答
百度网友fc027fc
推荐于2016-07-31 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3160
采纳率:83%
帮助的人:791万
展开全部
//求一个数组A[i...j]的最大值和最小值,分支算法,递归实现
//2015.2.9
//dev c++
#include<stdio.h>
#include<malloc.h>

int min(int a,int b){
    return a<b? a:b;
}
int max(int a,int b){
    return a>b? a:b;
}
int* MaxMin(int a[],int i,int j)
{
     int *m=(int *)malloc(2*sizeof(int));
     if(j-i+1==1){
         m[0]=m[1]=a[i];
         return m;
     }
     if(j-i+1==2){
         if(a[i]<a[j]){
             m[0]=a[i];
             m[1]=a[j];      
         }
         else{
             m[0]=a[j];
             m[1]=a[i];
         }
         return m;
     }
     int k=(j-i+1)/2;
     int *m1 = MaxMin(a,i,k);
     int *m2 = MaxMin(a,k+1,j);
     m[0]=min(m1[0],m2[0]);
     m[1]=max(m1[1],m2[1]);
     return m;
}
int main()
{
    int a[128];
    int n;
    int i;
    while(scanf("%d",&n)!=EOF){
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        int *m = MaxMin(a,0,n-1);
        printf("%d %d\n",m[0],m[1]);
    }
    return 0;
}

追问
谢谢,好像比较大的数组就不行

8
6 10 32 8 19 20 2 14
请按任意键继续. . .

七个数开始就不行了
追答
是的,你可以加两个free,释放不用的内存(malloc申请的)
听不清啊
高粉答主

2015-02-08 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
可以用指针来实现
void MaxMin(int i1,int j1,int *m,int *M) //求i1~i2之间的最小值*m和最大值*M
用MaxMin(i,k,&m1,&M1)
和MaxMin(k+1,j,&m2,&M2)
来调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
azui98
2015-02-08
知道答主
回答量:1
采纳率:0%
帮助的人:1286
展开全部
这个算法反而复杂了。这道题用分治复杂度也是O(N),线性扫描也是O(N)。如果你的确想要代码的话,请指明语言。
追问
c语言可以吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式