分治法解最大最小问题

#include <stdio.h>
void maxmin(int A[],int *e_max,int *e_min,int low,int high)
{
    int mid,x1,x2,y1,y2;
    int *a,*b,*c,*d;
    a=&x1;b=&x2;c=&y1;d=&y2;
    if((high-low<=1))
    {
        if(A[high]>A[low])
        {
            *e_max=A[high];
            *e_min=A[low];
        }
        else
        {
            *e_max=A[low];
            *e_min=A[high];
        }
    }
    else
    {
        mid=(low+high)/2;
        maxmin(A,a,c,low,mid);
        maxmin(A,b,d,mid+1,high);
        *e_max=(*a)>(*b)?(*a):(*b);
        *e_min=(*c)<(*d)?(*c):(*d);
    }
}
int main(int argc, const char * argv[]) {
    int a[6]={1,2,3,4,5,6};
    int max,min;
    int *p,*q;
    p=&max;
    q=&min;
    maxmin(a,p,q,0,5);
    printf("最大值为%d,最小值为%d\n",max,min);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_31631167/article/details/51178829