当前位置 博文首页 > 爱新觉罗?炒饭的博客:集合最大元问题(分治+递归)

    爱新觉罗?炒饭的博客:集合最大元问题(分治+递归)

    作者:[db:作者] 时间:2021-07-07 15:33

    问题描述
    在规模为n的数据元素集合中找出最大元。当n=2时,一次比较就可以找出两个数据元素的最大元和最小元。当n>2时,可以把n个数据元素分为大致相等的两半,一半有n/2个数据元素,而另一半有n/2个数据元素。 先分别找出各自组中的最大元,然后将两个最大元进行比较,就可得n个元素的最大元

    代码如下:

    #include <iostream>
    using namespace std;
    int Maxsum(int left,int right,int a[])
    {
        if(left==right)   //只有一个元素时
            return a[left];
        if(left==right-1)   //只有两个元素时
            return a[left]>a[right]?a[left]:a[right];
        else
        {
            int mid=(left+right)/2;
            return Maxsum(left,mid,a)>Maxsum(mid+1,right,a)?Maxsum(left,mid,a):Maxsum(mid+1,right,a);
        }
    }
    int main()
    {
       int n;
       cin>>n;
       int a[n];
       for(int i=0;i<n;i++)
           cin>>a[i];
       cout<<Maxsum(0,n,a)<<endl;
       return 0;
    }
    
    
    cs