编辑代码

#include <iostream>
using namespace  std;
#define MAX(a,b)    (a) > (b) ? (a) : (b)
#define MIN(a,b)    (a) > (b) ? (b) : (a)

int get_max(int* arr, int left, int right)
{
    int maxleft = 0, maxright = 0, mid = 0;
    
    if (left == right)          
        return arr[left];
    else if (left == right-1)   
        return MAX(arr[left], arr[right]);
    
    mid = (left+right)/2;
    maxleft = get_max(arr,left,mid);
    maxright =get_max(arr, mid+1, right);
    
    return MAX(maxleft, maxright);
}

void get_min_max(int* arr, int left, int right, int* min, int * max)
{
    int mid = 0;
    int lmin=0, lmax=0;
    int rmin=0, rmax=0;
    
    if (left == right) {
        *min = arr[left];
        *max = arr[left];
        return;             
    } else if (left == right - 1) {
        *min = MIN(arr[left], arr[right]);
        *max = MAX(arr[left], arr[right]);
        return;            
    }
    
    mid = (left+right) / 2;
    
    get_min_max(arr, left, mid, &lmin, &lmax);
    get_min_max(arr, mid+1, right, &rmin, &rmax);
    
    *min = MIN(lmin, rmin);
    *max = MAX(lmax, rmax);
}

int main()
{
    int min, max;
    int arr[] = {11, 9, 20, 56, 42, 3, 7,15,16};
    int len = sizeof(arr)/sizeof(arr[0]);
    
    get_max(arr, 0, len-1);
    get_min_max(arr, 0, len-1, &min, &max);
    cout<<"max:"<<max<<"min:"<<min;
    return 0;
}