# Maximum and minimum of an array using minimum number of comparisons

Write a C function to return minimum and maximum in an array. You program should make minimum number of comparisons.

First of all, how do we return multiple values from a C function? We can do it either using structures or pointers.

We have created a structure named pair (which contains min and max) to return multiple values.

 `struct` `pair  ` `{ ` `  ``int` `min; ` `  ``int` `max; ` `};   `

And the function declaration becomes: struct pair getMinMax(int arr[], int n) where arr[] is the array of size n whose minimum and maximum are needed.

METHOD 1 (Simple Linear Search)
Initialize values of min and max as minimum and maximum of the first two elements respectively. Starting from 3rd, compare each element with max and min, and change max and min accordingly (i.e., if the element is smaller than min then change min, else if the element is greater than max then change max, else ignore the element)

## C

 `/* structure is used to return two values from minMax() */` `#include ` `struct` `pair  ` `{ ` `  ``int` `min; ` `  ``int` `max; ` `};   ` ` `  `struct` `pair getMinMax(``int` `arr[], ``int` `n) ` `{ ` `  ``struct` `pair minmax;      ` `  ``int` `i; ` `   `  `  ``/*If there is only one element then return it as min and max both*/` `  ``if` `(n == 1) ` `  ``{ ` `     ``minmax.max = arr[0]; ` `     ``minmax.min = arr[0];      ` `     ``return` `minmax; ` `  ``}     ` ` `  `  ``/* If there are more than one elements, then initialize min  ` `      ``and max*/` `  ``if` `(arr[0] > arr[1])   ` `  ``{ ` `      ``minmax.max = arr[0]; ` `      ``minmax.min = arr[1]; ` `  ``}   ` `  ``else` `  ``{ ` `      ``minmax.max = arr[1]; ` `      ``minmax.min = arr[0]; ` `  ``}     ` ` `  `  ``for` `(i = 2; i  minmax.max)       ` `      ``minmax.max = arr[i]; ` `   `  `    ``else` `if` `(arr[i] <  minmax.min)       ` `      ``minmax.min = arr[i]; ` `  ``} ` `   `  `  ``return` `minmax; ` `} ` ` `  `/* Driver program to test above function */` `int` `main() ` `{ ` `  ``int` `arr[] = {1000, 11, 445, 1, 330, 3000}; ` `  ``int` `arr_size = 6; ` `  ``struct` `pair minmax = getMinMax (arr, arr_size); ` `  ``printf``(``"nMinimum element is %d"``, minmax.min); ` `  ``printf``(``"nMaximum element is %d"``, minmax.max); ` `  ``getchar``(); ` `}   `

## Java

 `// Java program of above implementation ` `public` `class` `GFG { ` `/* Class Pair is used to return two values from getMinMax() */` `    ``static` `class` `Pair { ` ` `  `        ``int` `min; ` `        ``int` `max; ` `    ``} ` ` `  `    ``static` `Pair getMinMax(``int` `arr[], ``int` `n) { ` `        ``Pair minmax = ``new`  `Pair(); ` `        ``int` `i; ` ` `  `        ``/*If there is only one element then return it as min and max both*/` `        ``if` `(n == ``1``) { ` `            ``minmax.max = arr[``0``]; ` `            ``minmax.min = arr[``0``]; ` `            ``return` `minmax; ` `        ``} ` ` `  `        ``/* If there are more than one elements, then initialize min  ` `    ``and max*/` `        ``if` `(arr[``0``] > arr[``1``]) { ` `            ``minmax.max = arr[``0``]; ` `            ``minmax.min = arr[``1``]; ` `        ``} ``else` `{ ` `            ``minmax.max = arr[``1``]; ` `            ``minmax.min = arr[``0``]; ` `        ``} ` ` `  `        ``for` `(i = ``2``; i < n; i++) { ` `            ``if` `(arr[i] > minmax.max) { ` `                ``minmax.max = arr[i]; ` `            ``} ``else` `if` `(arr[i] < minmax.min) { ` `                ``minmax.min = arr[i]; ` `            ``} ` `        ``} ` ` `  `        ``return` `minmax; ` `    ``} ` ` `  `    ``/* Driver program to test above function */` `    ``public` `static` `void` `main(String args[]) { ` `        ``int` `arr[] = {``1000``, ``11``, ``445``, ``1``, ``330``, ``3000``}; ` `        ``int` `arr_size = ``6``; ` `        ``Pair minmax = getMinMax(arr, arr_size); ` `        ``System.out.printf(````" Minimum element is %d"````, minmax.min); ` `        ``System.out.printf(````" Maximum element is %d"````, minmax.max); ` ` `  `    ``} ` ` `  `} `