/* 3.(a) W.A.P. to find maximum and minimum in a list of size 'n' using the recursive maximum algorithm. */


#include<stdio.h>
#include<conio.h>
#include<time.h>
clock_t start,finish;
void MaxMin(int a[],int low,int high,int *max,int *min)
{
    int mid,max1,min1;
    if (low == high) *max = *min = a[low]; /* Only one element exist */
    else if (low == (high - 1)) /* Exactly two elements exists */
    {
        if (a[low] < a[high])
        {
            *max = a[high];
            *min = a[low];
        }
        else
        {
            *max = a[low];
            *min = a[high];
        }
    }
    else /* More than two elements exists */
    {
        mid = (low + high) / 2;
        MaxMin(a,low,mid,max,min);
        MaxMin(a,mid+1,high,&max1,&min1);
        if (max1 > *max) *max = max1;
        if (min1 < *min) *min = min1;
    }
}
void main()
{
    int i,n,*a,key,maxval,minval;
    clrscr();
    printf("How many elements you wish to enter : ");
    scanf("%d",&n);
    a = (int *)malloc(n * sizeof(int));
    printf("\nEnter %d elements : ",n);
    for (i = 0; i < n; i++)
        scanf("%d",&a[i]);
    start = clock();
    MaxMin(a,0,n-1,&maxval,&minval);
    finish = clock();
    printf("\n\nMaximum value = %d",maxval);
    printf("\nMinimum value = %d",minval);
    printf("\nTime taken is %.2f",(finish - start) / CLK_TCK);
    getch();
}
/* OUTPUT
How many elements you wish to enter : 6
Enter 6 elements : 23 5 56 9 110 417
Maximum Value = 417
Minimum Value = 5
Time taken is 0
*/