数组的最大最小值问题很简单,最通俗易懂的方式就是将数组从头到尾遍历一遍,比较然后得出最小值与最大值。
这里我们不采用这种方式,我们采用分治策略,用递归的方式来解决问题。
设计思路是如果传入的数组的元素大于2,则将数组分为两个子数组,对子数组进行递归调用,直至数组元素个数为1个或2个,然后对此数组内元素直接进行比较得出最大值与最小值,合并子数组并比较两个子数组的最大值与最小值,直至得到整个数组的最大值与最小值。
代码如下:
#include <iostream>
using namespace std;
void MAXMIN(int* num,int left,int right,int &max,int &min{
if(left==right){
max=num[left];
min=num[right];
return;
}
if(right-left==1){
if(num[left]>num[right]){
max=num[left];
min=num[right];
}
else{
max=num[right];
min=num[left];
}
return;
}
int lmax,lmin,rmax,rmin;
int mid=(left+right)/2;
MAXMIN(num,left,mid-1,lmax,lmin);
MAXMIN(num,mid,right,rmax,rmin);
if(lmax>rmax){
max=lmax;
}
else{
max=rmax;
}
if (lmin>rmin) {
min=rmin;
}
else{
min=lmin;
}
}
int main(){
int max,min;
int num[1024],length;
cout<<"Input length:";
cin>>length;
cout<<"Input Array:";
for(int i=0;i<length;i++){
cin>>num[i];
}
MAXMIN(num,0,length-1,max,min);
cout<<"The max value is "<<max<<endl;
cout<<"The min value is "<<min<<endl;
return 0;
}