使用递归查找 n 个数字的数组中的最大和最小元素

To find largest and smallest elements in an array of n numbers using recursion

我正在使用分而治之的技术,在每次迭代时将数组减半。我对代码的逻辑很了解。

#include <stdio.h>

void minmax(int a[], int min,int max, int l,int r)
{
    int m,min1,max1;
    if(l==r)
    {
        min=a[l];
        max=a[l];

    }

    else if((r-l)==1)
    {
        if(a[l]<=a[r])
        { 
            min=a[l];
            max=a[r];
        }
        else
        {
            min=a[r];
            max=a[l];
        }
    }

    else
    {
        m = (l+r)/2;
        minmax(a,min,max,l,m);
        minmax(a,min1,max1,m+1,r);

        if(max1>max)
            max=max1;
        if(min1<min)
            min=min1;

    }

    printf("%d \t %d\n",max,min);
}

int main(void)
{

    int a[]={12,4,32,76,34,77,24,12};
    minmax(a,a[0],a[0],0,7);
    return 0;
}

输出结果如下


12   4
76   32
12   0
77   34
24   12
0    0
12   0

期望的输出


12   4
76   32
76   4
77   34
24   12
77   12
77   4

有什么建议吗?谢谢

编辑 1:算法


Algorithm MinMax(A[l..r], minval, maxval)
//Finds the values of the smallest and largest elements in a given subarray
//Input: A portion of array A[0..n − 1] between indices l and r (l ≤ r)
//Output: The values of the smallest and largest elements in A[l..r]
//assigned to minval and maxval, respectively
if r = l
    minval ← A[l]; maxval ← A[l]
else if r − l = 1
    if A[l] ≤ A[r]
        minval ← A[l]; maxval ← A[r]
    else 
        minval ← A[r]; maxval ← A[l]

    else //r − l > 1
        MinMax(A[l..(l + r)/2], minval, maxval)
        MinMax(A[(l + r)/2 + 1..r], minval2, maxval2)

        if minval2 < minval
            minval ← minval2
        if maxval2 > maxval
            maxval ← maxval2

你需要使用指针来使 minmax() return 任何东西...

尝试使用

void minmax(int a[], int * min_ptr,int * max_ptr, int l,int r){
    int m,min,max,min1,max1;

退出前:

*min_ptr=min;
*max_ptr=max;
return;
}

并替换来自

的所有 minmax 调用
minmax(a,min,max,l,m);

minmax(a,&min,&max,l,m);

并阅读有关按值调用

的内容