编辑代码

#include <stdio.h>
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a < b ? a : b)
void get_min_max(int a[],int *max,int *min,int left,int right);
void get_min_max(int a[],int *max,int *min,int left,int right)
{
    if(a == NULL || left > right){
        return ;
    }
    //一个元素
    if(left == right){
        *max = MAX(*max,a[left]);
        *min = MIN(*min,a[left]);
        return ;
    }
    //两个元素,*max和较大元素比较,*min和较小元素比较
    else if(right-left == 1){
        if(a[right] > a[left]){
            *max = MAX(*max,a[right]);
            *min = MIN(*min,a[left]);
            return ;
        }
        else{
            *max = MAX(*max,a[left]);
            *min = MIN(*min,a[right]);
            return ;
        }
    }
    get_min_max(a,max,min,left,(left+right)/2);
    get_min_max(a,max,min,(left+right)/2+1,right);
}
int main(int argc,char *argv[])
{
    int a[] = {11,9,20,56,42,3,7,15,16};
    int temp1 = a[0];
    int temp2 = a[0];
    int *max = &temp1;
    int *min = &temp2;
    get_min_max(a,max,min,0,sizeof(a)/sizeof(a[0])-1);
    printf("max = %d  min = %d\n",*max,*min);
    return 0;
}