算法课-分治法求最大最小元

#include
#include
using namespace std;
const int maxn=1000;
const int inf=0x7f7f7f7f;
int a[maxn];
//分治法 求最大元最小元

void Min_Max(int l,int r,int &maxNum,int &minNum)
{
    int x,y;
    if(l==r)
        maxNum=minNum=a[l];
    else if(l==r-1)
    {
        if(a[l]else
        maxNum=a[l],minNum=a[r];
    }
    else
    {

        int m=(l+r)/2;
        Min_Max(l,m,maxNum,minNum);//前半部分后半部分表
        Min_Max(m+1,r,x,y);//25,26注意一下
        if(maxNumif(minNum>y) minNum=y;
        //cout<
    }

}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF&&n)
    {
        for(int i=0;iscanf("%d",&a[i]);
        int Max_ans=-inf;
        int Min_ans=inf;
        Min_Max(0,n-1,Max_ans,Min_ans);
        printf("max: %d min: %d",Max_ans,Min_ans);
    }
    return 0;
}

//分析:T(n)=3n/2-2。由于递归算法所以这样的方法未必省时

你可能感兴趣的:(算法学习)