概述
分治法:将一个复杂的一分为二,然后对这两部分递归调用该函数,直到找到函数出口,求解出最简单的情况
需要注意的是分治时开始和结束位置参数的选择,一开始写的是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;
}
转载于:https://www.cnblogs.com/wuhenxiansen/p/10589907.html
最后
以上就是无情自行车为你收集整理的分治法求一个数组中最大最小值的全部内容,希望文章能够帮你解决分治法求一个数组中最大最小值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复