分治法求一个数组中最大最小值

Posted 无痕先森

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治法求一个数组中最大最小值相关的知识,希望对你有一定的参考价值。

分治法:将一个复杂的一分为二,然后对这两部分递归调用该函数,直到找到函数出口,求解出最简单的情况

需要注意的是分治时开始和结束位置参数的选择,一开始写的是s到mid-1,另一个是mid到e,然后就会数组为奇数个时结果对,为偶数个时结果错,后面改为s到mid,另一个是mid+1到e 结果就对了。

#include<iostream>
using namespace std;
#define N 10
#define MAX(a,b)(a>b?a:b)
#define MIN(a,b)(a<b?a:b)
/*分治法 */
void DACM(int *a,int s,int e,int &max,int &min)//调用引用的用于接收最大最小值
{
    int Lmin,Lmax,Rmin,Rmax;
    if(s==e)
    {
        max=*(a+s);
        min=*(a+s);
        return ;
    }
    if((e-s)==1)
    {
        max=MAX(*(a+s),*(a+e));
        min=MIN(*(a+s),*(a+e));
        return ;
    }
    int mid=(s+e)/2;
    DACM(a,s,mid,Lmax,Lmin);
    DACM(a,mid+1,e,Rmax,Rmin);
    if(Lmax>Rmax)
    {
        max=Lmax;
        cout<<"max="<<max<<endl;//查看当前最大值
    }
    else
    {
        max=Rmax;
        cout<<"max="<<max<<endl;
    }
    if(Lmin<min)
    {
        min=Rmin;
        cout<<"min="<<min<<endl;//查看当前最小值
    }
    else
    {
        min=Lmin;
        cout<<"min="<<min<<endl;
    }
    return ;
}
int main()
{
    int max,min;
    int a[N]={5,0,1,2,3,7,8,4,6,9};
    DACM(a,0,N-1,max,min);
    cout<<"最大值"<<max<<"最小值"<<min<<endl;
    return 0;
}

 

以上是关于分治法求一个数组中最大最小值的主要内容,如果未能解决你的问题,请参考以下文章

分治法求最大最小

分治理法求数组最大值

HNUCM-1435 最大最小值(分治法)

使用分治法是不是会提高在数组中查找最大值和最小值的时间复杂度

分治法解决寻找数组中最大最小值的问题

分治算法 ------最大最小值小结