Given an array of size N. The task is to find the maximum and the minimum element of the array using the minimum number of comparisons.
Examples:
Input: arr[] = {3, 5, 4, 1, 9}
Output: Minimum element is: 1
              Maximum element is: 9
Input: arr[] = {22, 14, 8, 17, 35, 3}
Output:  Minimum element is: 3
              Maximum element is: 35
First of all, how do we return multiple values from a 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. 
C++
| 
structpair {
     intmin;
     intmax;
 };
   | 
 
 
 
 
C
| 
structpair {
     intmin;
     intmax;
 };
 | 
 
 
 
 
Java
| 
staticclasspair {
     intmin;
     intmax;
 };
   | 
 
 
 
 
Python3
| 
    classpair:
       def__init__(self):
         self.min=None
         self.max=None
     | 
 
 
 
 
C#
| 
publicstaticclasspair {
     publicintmin;
     publicintmax;
 };
 | 
 
 
 
 
Javascript
| 
<script>
   class pair 
 {
   constructor(){
     this.min = null;
     this.max = null;
   }
 };
     </script>
 | 
 
 
 
 
 
 
 
1. Maximum and minimum of an array using Sorting:
Approach:
One approach to find the maximum and minimum element in an array is to first sort the array in ascending order. Once the array is sorted, the first element of the array will be the minimum element and the last element of the array will be the maximum element.
Algorithm:
- Initialize an array.
- Sort the array in ascending order.
- The first element of the array will be the minimum element.
- The last element of the array will be the maximum element.
- Print the minimum and maximum element.
Below is the implementation of the above approach:
C++
| 
#include <bits/stdc++.h>
 usingnamespacestd;
   structPair {
     intmin;
     intmax;
 };
   Pair getMinMax(intarr[], intn)
 {
     Pair minmax;
       sort(arr, arr + n);
       minmax.min = arr[0];
     minmax.max = arr[n - 1];
       returnminmax;
 }
   intmain()
 {
     intarr[] = { 1000, 11, 445, 1, 330, 3000 };
     intarr_size = sizeof(arr) / sizeof(arr[0]);
       Pair minmax = getMinMax(arr, arr_size);
       cout << "Minimum element is "<< minmax.min << endl;
     cout << "Maximum element is "<< minmax.max << endl;
       return0;
 }
   | 
 
 
 
 
Java
| 
importjava.io.*;
 importjava.util.*;
   classPair {
     publicintmin;
     publicintmax;
 }
   classMain {
     staticPair getMinMax(intarr[], intn) {
         Pair minmax = newPair();
         Arrays.sort(arr);
         minmax.min = arr[0];
         minmax.max = arr[n - 1];
         returnminmax;
     }
       publicstaticvoidmain(String[] args) {
         intarr[] = { 1000, 11, 445, 1, 330, 3000};
         intarr_size = arr.length;
         Pair minmax = getMinMax(arr, arr_size);
         System.out.println("Minimum element is "+ minmax.min);
         System.out.println("Maximum element is "+ minmax.max);
     }
 }
 | 
 
 
 
 
Python
| 
defgetMinMax(arr):
     arr.sort()
     minmax ={"min": arr[0], "max": arr[-1]}
     returnminmax
   arr =[1000, 11, 445, 1, 330, 3000]
 minmax =getMinMax(arr)
   print("Minimum element is", minmax["min"])
 print("Maximum element is", minmax["max"])
 | 
 
 
 
 
C#
| 
usingSystem;
   publicstructPair
 {
     publicintmin;
     publicintmax;
 }
   classProgram {
     
     
     staticPair GetMinMax(int[] arr, intn)
     {
         Pair minmax = newPair();
           
         Array.Sort(arr);
           
         minmax.min = arr[0];
           
         minmax.max = arr[n - 1];
           returnminmax;
     }
       staticvoidMain()
     {
         int[] arr = { 1000, 11, 445, 1, 330, 3000 };
         intarrSize = arr.Length;
           
         
         Pair minmax = GetMinMax(arr, arrSize);
           
         Console.WriteLine("Minimum element is "
                           + minmax.min);
         Console.WriteLine("Maximum element is "
                           + minmax.max);
     }
 }
 | 
 
 
 
 
Javascript
| 
functiongetMinMax(arr) {
     
     const minmax = {};
       
     arr.sort((a, b) => a - b);
       
     minmax.min = arr[0];
     
     minmax.max = arr[arr.length - 1];
       
     returnminmax;
 }
   functionmain() {
     
     const arr = [1000, 11, 445, 1, 330, 3000];
     
     
     const minmax = getMinMax(arr);
       
     console.log("Minimum element is "+ minmax.min);
     
     console.log("Maximum element is "+ minmax.max);
 }
   main();
 | 
 
 
 
 
 
Output
Minimum element is 1
Maximum element is 3000
 
Complexity Analysis:
The time complexity of this approach is O(n log n), where n is the number of elements in the array, as we are using a sorting algorithm. The space complexity is O(1), as we are not using any extra space.
Number of Comparisons:
The number of comparisons made to find the minimum and maximum elements is equal to the number of comparisons made during the sorting process. For any comparison-based sorting algorithm, the minimum number of comparisons required to sort an array of n elements is O(n log n). Hence, the number of comparisons made in this approach is also O(n log n).
2. Maximum and minimum of an array using 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) 
Below is the implementation of the above approach:
C++
| 
#include<bits/stdc++.h>
 usingnamespacestd;
   structPair 
 {
     intmin;
     intmax;
 }; 
   Pair getMinMax(intarr[], intn)
 {
     structPair minmax;     
     inti;
     
     
     
     if(n == 1)
     {
         minmax.max = arr[0];
         minmax.min = arr[0];     
         returnminmax;
     } 
     
     
     
     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];
             
         elseif(arr[i] < minmax.min)     
             minmax.min = arr[i];
     }
     returnminmax;
 }
   intmain()
 {
     intarr[] = { 1000, 11, 445, 
                   1, 330, 3000 };
     intarr_size = 6;
     
     structPair minmax = getMinMax(arr, arr_size);
     
     cout << "Minimum element is "
          << minmax.min << endl;
     cout << "Maximum element is "
          << minmax.max;
          
     return0;
 } 
   | 
 
 
 
 
C
| 
#include<stdio.h>
 structpair 
 {
   intmin;
   intmax;
 };  
   structpair getMinMax(intarr[], intn)
 {
   structpair minmax;     
   inti;
   
   
   if(n == 1)
   {
      minmax.max = arr[0];
      minmax.min = arr[0];     
      returnminmax;
   }    
     
       
   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];
   
     elseif(arr[i] <  minmax.min)      
       minmax.min = arr[i];
   }
   
   returnminmax;
 }
   intmain()
 {
   intarr[] = {1000, 11, 445, 1, 330, 3000};
   intarr_size = 6;
   structpair minmax = getMinMax (arr, arr_size);
   printf("nMinimum element is %d", minmax.min);
   printf("nMaximum element is %d", minmax.max);
   getchar();
 }  
 | 
 
 
 
 
Java
| 
importjava.io.*;
 importjava.util.*;
   publicclassGFG {
     staticclassPair {
           intmin;
         intmax;
     }
       staticPair getMinMax(intarr[], intn) {
         Pair minmax = newPair();
         inti;
           
         if(n == 1) {
             minmax.max = arr[0];
             minmax.min = arr[0];
             returnminmax;
         }
           
     
         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];
             } elseif(arr[i] < minmax.min) {
                 minmax.min = arr[i];
             }
         }
           returnminmax;
     }
       
     publicstaticvoidmain(String args[]) {
         intarr[] = {1000, 11, 445, 1, 330, 3000};
         intarr_size = 6;
         Pair minmax = getMinMax(arr, arr_size);
         System.out.printf("\nMinimum element is %d", minmax.min);
         System.out.printf("\nMaximum element is %d", minmax.max);
       }
   }
 | 
 
 
 
 
Python3
| 
    classpair:
     def__init__(self):
         self.min=0
         self.max=0
   defgetMinMax(arr: list, n: int) -> pair:
     minmax =pair()
       
     ifn ==1:
         minmax.max=arr[0]
         minmax.min=arr[0]
         returnminmax
       
     
     ifarr[0] > arr[1]:
         minmax.max=arr[0]
         minmax.min=arr[1]
     else:
         minmax.max=arr[1]
         minmax.min=arr[0]
       fori inrange(2, n):
         ifarr[i] > minmax.max:
             minmax.max=arr[i]
         elifarr[i] < minmax.min:
             minmax.min=arr[i]
       returnminmax
   if__name__ =="__main__":
     arr =[1000, 11, 445, 1, 330, 3000]
     arr_size =6
     minmax =getMinMax(arr, arr_size)
     print("Minimum element is", minmax.min)
     print("Maximum element is", minmax.max)
   | 
 
 
 
 
C#
| 
usingSystem;
   classGFG 
 {
     
     
     classPair 
     {
         publicintmin;
         publicintmax;
     }
       staticPair getMinMax(int[]arr, intn)
     {
         Pair minmax = newPair();
         inti;
           
         
         if(n == 1)
         {
             minmax.max = arr[0];
             minmax.min = arr[0];
             returnminmax;
         }
           
         
         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];
             } 
             elseif(arr[i] < minmax.min)
             {
                 minmax.min = arr[i];
             }
         }
         returnminmax;
     }
       
     publicstaticvoidMain(String []args) 
     {
         int[]arr = {1000, 11, 445, 1, 330, 3000};
         intarr_size = 6;
         Pair minmax = getMinMax(arr, arr_size);
         Console.Write("Minimum element is {0}",
                                    minmax.min);
         Console.Write("\nMaximum element is {0}", 
                                      minmax.max);
     }
 }
   | 
 
 
 
 
Javascript
| 
<script>
       functiongetMinMax(arr, n)
     {
         minmax = newArray();
         vari;
         varmin;
         varmax;
           
         if(n == 1) {
             minmax.max = arr[0];
             minmax.min = arr[0];
             returnminmax;
         }
           
     
         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];
             } elseif(arr[i] < minmax.min) {
                 minmax.min = arr[i];
             }
         }
           returnminmax;
     }
       
     
         vararr = [1000, 11, 445, 1, 330, 3000];
         vararr_size = 6;
         minmax = getMinMax(arr, arr_size);
         document.write("\nMinimum element is ",minmax.min +"<br>");
         document.write("\nMaximum element is ", minmax.max);
   </script>
 | 
 
 
 
 
 
Output
Minimum element is 1
Maximum element is 3000
 
Time Complexity: O(n)
Auxiliary Space: O(1) as no extra space was needed.
In this method, the total number of comparisons is 1 + 2(n-2) in the worst case and 1 + n – 2 in the best case. 
In the above implementation, the worst case occurs when elements are sorted in descending order and the best case occurs when elements are sorted in ascending order.
3. Maximum and minimum of an array using the tournament method:
Divide the array into two parts and compare the maximums and minimums of the two parts to get the maximum and the minimum of the whole array.
Pair MaxMin(array, array_size)
    if array_size = 1
        return element as both max and min
    else if arry_size = 2
        one comparison to determine max and min
         return that pair
    else    /* array_size  > 2 */
        recur for max and min of left half
        recur for max and min of right half
        one comparison determines true max of the two candidates
        one comparison determines true min of the two candidates
        return the pair of max and min
Below is the implementation of the above approach:
C++
| 
#include <bits/stdc++.h>
 usingnamespacestd;
   structPair {
     intmin;
     intmax;
 };
   structPair getMinMax(intarr[], intlow, inthigh)
 {
     structPair minmax, mml, mmr;
     intmid;
       
     if(low == high) {
         minmax.max = arr[low];
         minmax.min = arr[low];
         returnminmax;
     }
       
     if(high == low + 1) {
         if(arr[low] > arr[high]) {
             minmax.max = arr[low];
             minmax.min = arr[high];
         }
         else{
             minmax.max = arr[high];
             minmax.min = arr[low];
         }
         returnminmax;
     }
       
     mid = (low + high) / 2;
     mml = getMinMax(arr, low, mid);
     mmr = getMinMax(arr, mid + 1, high);
       
     if(mml.min < mmr.min)
         minmax.min = mml.min;
     else
         minmax.min = mmr.min;
       
     if(mml.max > mmr.max)
         minmax.max = mml.max;
     else
         minmax.max = mmr.max;
       returnminmax;
 }
   intmain()
 {
     intarr[] = { 1000, 11, 445, 1, 330, 3000 };
     intarr_size = 6;
       structPair minmax = getMinMax(arr, 0, arr_size - 1);
       cout << "Minimum element is "<< minmax.min << endl;
     cout << "Maximum element is "<< minmax.max;
       return0;
 }
   | 
 
 
 
 
C
| 
#include <stdio.h>
 structpair {
     intmin;
     intmax;
 };
   structpair getMinMax(intarr[], intlow, inthigh)
 {
     structpair minmax, mml, mmr;
     intmid;
       
     if(low == high) {
         minmax.max = arr[low];
         minmax.min = arr[low];
         returnminmax;
     }
       
     if(high == low + 1) {
         if(arr[low] > arr[high]) {
             minmax.max = arr[low];
             minmax.min = arr[high];
         }
         else{
             minmax.max = arr[high];
             minmax.min = arr[low];
         }
         returnminmax;
     }
       
     mid = (low + high) / 2;
     mml = getMinMax(arr, low, mid);
     mmr = getMinMax(arr, mid + 1, high);
       
     if(mml.min < mmr.min)
         minmax.min = mml.min;
     else
         minmax.min = mmr.min;
       
     if(mml.max > mmr.max)
         minmax.max = mml.max;
     else
         minmax.max = mmr.max;
       returnminmax;
 }
   intmain()
 {
     intarr[] = { 1000, 11, 445, 1, 330, 3000 };
     intarr_size = 6;
     structpair minmax = getMinMax(arr, 0, arr_size - 1);
     printf("nMinimum element is %d", minmax.min);
     printf("nMaximum element is %d", minmax.max);
     getchar();
 }
 | 
 
 
 
 
Java
| 
importjava.io.*;
 importjava.util.*;
 publicclassGFG {
     
      
     staticclassPair {
           intmin;
         intmax;
     }
       staticPair getMinMax(intarr[], intlow, inthigh)
     {
         Pair minmax = newPair();
         Pair mml = newPair();
         Pair mmr = newPair();
         intmid;
           
         if(low == high) {
             minmax.max = arr[low];
             minmax.min = arr[low];
             returnminmax;
         }
           
         if(high == low + 1) {
             if(arr[low] > arr[high]) {
                 minmax.max = arr[low];
                 minmax.min = arr[high];
             }
             else{
                 minmax.max = arr[high];
                 minmax.min = arr[low];
             }
             returnminmax;
         }
           
         mid = (low + high) / 2;
         mml = getMinMax(arr, low, mid);
         mmr = getMinMax(arr, mid + 1, high);
           
         if(mml.min < mmr.min) {
             minmax.min = mml.min;
         }
         else{
             minmax.min = mmr.min;
         }
           
         if(mml.max > mmr.max) {
             minmax.max = mml.max;
         }
         else{
             minmax.max = mmr.max;
         }
           returnminmax;
     }
       
     publicstaticvoidmain(String args[])
     {
         intarr[] = { 1000, 11, 445, 1, 330, 3000};
         intarr_size = 6;
         Pair minmax = getMinMax(arr, 0, arr_size - 1);
         System.out.printf("\nMinimum element is %d",
                           minmax.min);
         System.out.printf("\nMaximum element is %d",
                           minmax.max);
     }
 }
 | 
 
 
 
 
Python3
| 
defgetMinMax(low, high, arr):
     arr_max =arr[low]
     arr_min =arr[low]
       
     iflow ==high:
         arr_max =arr[low]
         arr_min =arr[low]
         return(arr_max, arr_min)
       
     elifhigh ==low +1:
         ifarr[low] > arr[high]:
             arr_max =arr[low]
             arr_min =arr[high]
         else:
             arr_max =arr[high]
             arr_min =arr[low]
         return(arr_max, arr_min)
     else:
           
         mid =int((low +high) /2)
         arr_max1, arr_min1 =getMinMax(low, mid, arr)
         arr_max2, arr_min2 =getMinMax(mid +1, high, arr)
       return(max(arr_max1, arr_max2), min(arr_min1, arr_min2))
     arr =[1000, 11, 445, 1, 330, 3000]
 high =len(arr) -1
 low =0
 arr_max, arr_min =getMinMax(low, high, arr)
 print('Minimum element is ', arr_min)
 print('nMaximum element is ', arr_max)
   | 
 
 
 
 
C#
| 
usingSystem;
   publicclassGFG {
     
      
     publicclassPair {
           publicintmin;
         publicintmax;
     }
       staticPair getMinMax(int[] arr, intlow, inthigh)
     {
         Pair minmax = newPair();
         Pair mml = newPair();
         Pair mmr = newPair();
         intmid;
           
         if(low == high) {
             minmax.max = arr[low];
             minmax.min = arr[low];
             returnminmax;
         }
           
         if(high == low + 1) {
             if(arr[low] > arr[high]) {
                 minmax.max = arr[low];
                 minmax.min = arr[high];
             }
             else{
                 minmax.max = arr[high];
                 minmax.min = arr[low];
             }
             returnminmax;
         }
           
         mid = (low + high) / 2;
         mml = getMinMax(arr, low, mid);
         mmr = getMinMax(arr, mid + 1, high);
           
         if(mml.min < mmr.min) {
             minmax.min = mml.min;
         }
         else{
             minmax.min = mmr.min;
         }
           
         if(mml.max > mmr.max) {
             minmax.max = mml.max;
         }
         else{
             minmax.max = mmr.max;
         }
           returnminmax;
     }
       
     publicstaticvoidMain(String[] args)
     {
         int[] arr = { 1000, 11, 445, 1, 330, 3000 };
         intarr_size = 6;
         Pair minmax = getMinMax(arr, 0, arr_size - 1);
         Console.Write("\nMinimum element is {0}",
                       minmax.min);
         Console.Write("\nMaximum element is {0}",
                       minmax.max);
     }
 }
   | 
 
 
 
 
Javascript
| 
<script>
  
     
      class Pair {
          constructor(){
         this.min = -1;
         this.max = 10000000;
          }
     }
        functiongetMinMax(arr , low , high) {
         varminmax = newPair();
         varmml = newPair();
         varmmr = newPair();
         varmid;
           
         if(low == high) {
             minmax.max = arr[low];
             minmax.min = arr[low];
             returnminmax;
         }
           
         if(high == low + 1) {
             if(arr[low] > arr[high]) {
                 minmax.max = arr[low];
                 minmax.min = arr[high];
             } else{
                 minmax.max = arr[high];
                 minmax.min = arr[low];
             }
             returnminmax;
         }
           
         mid = parseInt((low + high) / 2);
         mml = getMinMax(arr, low, mid);
         mmr = getMinMax(arr, mid + 1, high);
           
         if(mml.min < mmr.min) {
             minmax.min = mml.min;
         } else{
             minmax.min = mmr.min;
         }
           
         if(mml.max > mmr.max) {
             minmax.max = mml.max;
         } else{
             minmax.max = mmr.max;
         }
           returnminmax;
     }
       
         vararr = [ 1000, 11, 445, 1, 330, 3000 ];
         vararr_size = 6;
         varminmax = getMinMax(arr, 0, arr_size - 1);
         document.write("\nMinimum element is ", minmax.min);
         document.write("<br/>Maximum element is ", minmax.max);
   </script>
 | 
 
 
 
 
 
Output
Minimum element is 1
Maximum element is 3000
 
Time Complexity: O(n)
Auxiliary Space: O(log n) as the stack space will be filled for the maximum height of the tree formed during recursive calls same as a binary tree.
Total number of comparisons: let the number of comparisons be T(n). T(n) can be written as follows: 
Algorithmic Paradigm: Divide and Conquer 
T(n) = T(floor(n/2)) + T(ceil(n/2)) + 2
T(2) = 1
T(1) = 0
If n is a power of 2, then we can write T(n) as: 
T(n) = 2T(n/2) + 2
After solving the above recursion, we get 
T(n)  = 3n/2 -2
Thus, the approach does 3n/2 -2 comparisons if n is a power of 2. And it does more than 3n/2 -2 comparisons if n is not a power of 2.
4. Maximum and minimum of an array by comparing in pairs:
If n is odd then initialize min and max as the first element. 
If n is even then initialize min and max as minimum and maximum of the first two elements respectively. 
For the rest of the elements, pick them in pairs and compare their 
maximum and minimum with max and min respectively. 
Below is the implementation of the above approach:
C++
| 
#include<bits/stdc++.h> 
 usingnamespacestd; 
   structPair 
 { 
     intmin; 
     intmax; 
 }; 
   structPair getMinMax(intarr[], intn) 
 { 
     structPair minmax;     
     inti; 
     
     
     
     
     if(n % 2 == 0) 
     { 
         if(arr[0] > arr[1])     
         { 
             minmax.max = arr[0]; 
             minmax.min = arr[1]; 
         } 
         else
         { 
             minmax.min = arr[0]; 
             minmax.max = arr[1]; 
         } 
         
         
         i = 2; 
     } 
     
     
     
     
     else
     { 
         minmax.min = arr[0]; 
         minmax.max = arr[0]; 
         
         
         i = 1; 
     } 
     
     
     
     
     while(i < n - 1) 
     {         
         if(arr[i] > arr[i + 1])         
         { 
             if(arr[i] > minmax.max)     
                 minmax.max = arr[i]; 
                 
             if(arr[i + 1] < minmax.min)         
                 minmax.min = arr[i + 1];     
         } 
         else
         { 
             if(arr[i + 1] > minmax.max)     
                 minmax.max = arr[i + 1]; 
                 
             if(arr[i] < minmax.min)         
                 minmax.min = arr[i];     
         } 
         
         
         
         i += 2; 
     }         
     returnminmax; 
 } 
   intmain() 
 { 
     intarr[] = { 1000, 11, 445, 
                 1, 330, 3000 }; 
     intarr_size = 6; 
     
     Pair minmax = getMinMax(arr, arr_size); 
     
     cout << "Minimum element is "
         << minmax.min << endl; 
     cout << "Maximum element is "
         << minmax.max; 
         
     return0; 
 } 
   | 
 
 
 
 
C
| 
#include<stdio.h>
   structpair 
 {
   intmin;
   intmax;
 };  
   structpair getMinMax(intarr[], intn)
 {
   structpair minmax;     
   inti;  
     
     
     
   if(n%2 == 0)
   {         
     if(arr[0] > arr[1])     
     {
       minmax.max = arr[0];
       minmax.min = arr[1];
     }  
     else
     {
       minmax.min = arr[0];
       minmax.max = arr[1];
     }
     i = 2;  
   }  
      
     
     
   else
   {
     minmax.min = arr[0];
     minmax.max = arr[0];
     i = 1;  
   }
   
   
      
   while(i < n-1)  
   {          
     if(arr[i] > arr[i+1])          
     {
       if(arr[i] > minmax.max)        
         minmax.max = arr[i];
       if(arr[i+1] < minmax.min)          
         minmax.min = arr[i+1];        
     } 
     else
     {
       if(arr[i+1] > minmax.max)        
         minmax.max = arr[i+1];
       if(arr[i] < minmax.min)          
         minmax.min = arr[i];        
     }        
     i += 2; 
                
   }            
     returnminmax;
 }    
   intmain()
 {
   intarr[] = {1000, 11, 445, 1, 330, 3000};
   intarr_size = 6;
   structpair minmax = getMinMax (arr, arr_size);
   printf("Minimum element is %d", minmax.min);
   printf("\nMaximum element is %d", minmax.max);
   getchar();
 }
 | 
 
 
 
 
Java
| 
importjava.io.*;
 importjava.util.*;
 publicclassGFG {
       staticclassPair {
           intmin;
         intmax;
     }
       staticPair getMinMax(intarr[], intn) {
         Pair minmax = newPair();
         inti;
         
     
     
         if(n % 2== 0) {
             if(arr[0] > arr[1]) {
                 minmax.max = arr[0];
                 minmax.min = arr[1];
             } else{
                 minmax.min = arr[0];
                 minmax.max = arr[1];
             }
             i = 2;
             
         } 
     
     else{
             minmax.min = arr[0];
             minmax.max = arr[0];
             i = 1;
             
         }
           
      
         while(i < n - 1) {
             if(arr[i] > arr[i + 1]) {
                 if(arr[i] > minmax.max) {
                     minmax.max = arr[i];
                 }
                 if(arr[i + 1] < minmax.min) {
                     minmax.min = arr[i + 1];
                 }
             } else{
                 if(arr[i + 1] > minmax.max) {
                     minmax.max = arr[i + 1];
                 }
                 if(arr[i] < minmax.min) {
                     minmax.min = arr[i];
                 }
             }
             i += 2;
             
                
         }
           returnminmax;
     }
       
     publicstaticvoidmain(String args[]) {
         intarr[] = {1000, 11, 445, 1, 330, 3000};
         intarr_size = 6;
         Pair minmax = getMinMax(arr, arr_size);
         System.out.printf("Minimum element is %d", minmax.min);
         System.out.printf("\nMaximum element is %d", minmax.max);
       }
 }
 | 
 
 
 
 
Python3
| 
defgetMinMax(arr):
     
     n =len(arr)
     
     
     
     
     if(n %2==0):
         
         ifarr[0] < arr[1]:
             mn =arr[0]
             mx =arr[1]
         else:
             mn =arr[1]
             mx =arr[0]
         
         
         i =2
         
     
     
     
     else:
         mx =mn =arr[0]
         
         
         i =1
         
     
     
     while(i < n -1):
         ifarr[i] < arr[i +1]:
             mx =max(mx, arr[i +1])
             mn =min(mn, arr[i])
         else:
             mx =max(mx, arr[i])
             mn =min(mn, arr[i +1])
             
         
         
         i +=2
     
     return(mx, mn)
     
 if__name__ =='__main__':
     
     arr =[1000, 11, 445, 1, 330, 3000]
     mx, mn =getMinMax(arr)
     print("Minimum element is", mn)
     print("Maximum element is", mx)
     
 | 
 
 
 
 
C#
| 
usingSystem;
     
 classGFG 
 {
       
        
     publicclassPair 
     {
         publicintmin;
         publicintmax;
     }
       staticPair getMinMax(int[]arr, intn)
     {
         Pair minmax = newPair();
         inti;
         
         
         
         
         if(n % 2 == 0) 
         {
             if(arr[0] > arr[1])
             {
                 minmax.max = arr[0];
                 minmax.min = arr[1];
             } 
             else
             {
                 minmax.min = arr[0];
                 minmax.max = arr[1];
             }
             i = 2;
         }
         
         
         
         
         
         else
         {
             minmax.min = arr[0];
             minmax.max = arr[0];
             i = 1;
             
         }
           
         
         while(i < n - 1) 
         {
             if(arr[i] > arr[i + 1]) 
             {
                 if(arr[i] > minmax.max) 
                 {
                     minmax.max = arr[i];
                 }
                 if(arr[i + 1] < minmax.min)
                 {
                     minmax.min = arr[i + 1];
                 }
             } 
             else
             {
                 if(arr[i + 1] > minmax.max)
                 {
                     minmax.max = arr[i + 1];
                 }
                 if(arr[i] < minmax.min)
                 {
                     minmax.min = arr[i];
                 }
             }
             i += 2;
             
             
             
         }
         returnminmax;
     }
       
     publicstaticvoidMain(String []args) 
     {
         int[]arr = {1000, 11, 445, 1, 330, 3000};
         intarr_size = 6;
         Pair minmax = getMinMax(arr, arr_size);
         Console.Write("Minimum element is {0}",
                                    minmax.min);
         Console.Write("\nMaximum element is {0}", 
                                      minmax.max);
     }
 }
   | 
 
 
 
 
Javascript
| 
<script>
   functiongetMinMax(arr){
     
     let n = arr.length
     let mx,mn,i
     
     
     
     
     if(n % 2 == 0){
         mx = Math.max(arr[0], arr[1])
         mn = Math.min(arr[0], arr[1])
         
         
         i = 2
     }
         
     
     
     
     else{
         mx = mn = arr[0]
         
         
         i = 1
     }
         
     
     
     while(i < n - 1){
         if(arr[i] < arr[i + 1]){
             mx = Math.max(mx, arr[i + 1])
             mn = Math.min(mn, arr[i])
         }
         else{
             mx = Math.max(mx, arr[i])
             mn = Math.min(mn, arr[i + 1])
         }
             
         
         
         i += 2
     }
     
     return[mx, mn]
 }
     
     
 let arr = [1000, 11, 445, 1, 330, 3000]
 let mx = getMinMax(arr)[0]
 let mn = getMinMax(arr)[1]
 document.write("Minimum element is", mn,"</br>")
 document.write("Maximum element is", mx,"</br>")
     
   </script>
 | 
 
 
 
 
 
Output
Minimum element is 1
Maximum element is 3000
 
Time Complexity: O(n)
Auxiliary Space: O(1) as no extra space was needed.
The total number of comparisons: Different for even and odd n, see below: 
       If n is odd:    3*(n-1)/2  
       If n is even:   1 Initial comparison for initializing min and max, 
                           and 3(n-2)/2 comparisons for rest of the elements  
                      =  1 + 3*(n-2)/2 = 3n/2 -2
The third and fourth approaches make an equal number of comparisons when n is a power of 2. 
In general, method 4 seems to be the best.
Please write comments if you find any bug in the above programs/algorithms or a better way to solve the same problem.
 
                                            Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
                                            Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!