Я использую технику Divide и Conquer, которая уменьшает массив до половины на каждой итерации. Я структурирован с логикой кода.Чтобы найти самые большие и наименьшие элементы в массиве из n чисел, используя рекурсию
#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
Есть предложения? Благодарю.
EDIT 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
Debugging звучит как разумный план. –