分治法的思想就是每次将数组一分为二,分别求两部分的最大值与最小值,然后比较哪部分的更大和更小,最后得出整个数组的最大最小值。
源代码如下:
/************************************************************************/
/*
函数功能:分治法求double型数组的最大最小值
参数:double array[] 待求数组
int low,int high 数组的最小和最大下标
double &maxValue,double &minvalue 最大最小值的引用(返回值)
*/
/************************************************************************/
void getMaxMinValue(double array[],int low,int high,double &maxValue,double &minvalue)
{
double LMin,Lmax; //声明左侧最大值和最小值变量
double RMin,Rmax; //声明右侧最大值和最小值变量
if (low == high) //仅有一个元素
{
maxValue = array[low];
minvalue = array[low];
return ;
}
if ((low+1) == high) //仅有2个元素
{
if (array[low] > array[high])
{
maxValue = array[low];
minvalue = array[high];
}
else
{
maxValue =array[high];
minvalue= array[low];
}
return ;
}
int mid=(high+low)/2;
getMaxMinValue(array,low,mid-1,Lmax,LMin); //分治
getMaxMinValue(array,mid,high,Rmax,RMin);
if (Lmax > Rmax) //判断哪边的最小,哪边的最大
{
maxValue=Lmax;
}
else
maxValue =Rmax;
if (LMin<RMin)
{
minvalue = LMin;
}
else
minvalue = RMin;
return ;
}