数组的最大最小值问题

   数组的最大最小值问题很简单,最通俗易懂的方式就是将数组从头到尾遍历一遍,比较然后得出最小值与最大值。
   这里我们不采用这种方式,我们采用分治策略,用递归的方式来解决问题。
   设计思路是如果传入的数组的元素大于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);//调用函数,注意是length-1
    cout<<"The max value is "<<max<<endl;
	cout<<"The min value is "<<min<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值