Open In App

Middle of three using minimum comparisons

Improve
Improve
Like Article
Like
Save
Share
Report

Given three distinct numbers a, b and c find the number with a value in middle.

Examples:

Input : a = 20, b = 30, c = 40
Output : 30

Input : a = 12, n = 32, c = 11
Output : 12

Simple Approach:

C++




// CPP program to find  middle of three distinct
// numbers
#include <bits/stdc++.h>
using namespace std;
 
int middleOfThree(int a, int b, int c)
{
    // Checking for b
    if ((a < b && b < c) || (c < b && b < a))
       return b;
 
    // Checking for a
    else if ((b < a && a < c) || (c < a && a < b))
       return a;
 
    else
       return c;
}
 
// Driver Code
int main()
{
    int a = 20, b = 30, c = 40;
    cout << middleOfThree(a, b, c);
    return 0;
}


Java




// Java program to find middle of
// three distinct numbers
import java.util.*;
 
class Middle
{  
    // Function to find the middle of three number
    public static int middleOfThree(int a, int b,
                                          int c)
    {
        // Checking for b
        if ((a < b && b < c) || (c < b && b < a))
            return b;
 
        // Checking for a
        else if ((b < a && a < c) || (c < a && a < b))
        return a;
 
        else
        return c;
    }
     
    // driver code
    public static void main(String[] args)
    {
        int a = 20, b = 30, c = 40;
        System.out.println( middleOfThree(a, b, c) );
    }
}
 
// This code is contributed by rishabh_jain


Python3




# Python3 program to find middle
# of three distinct numbers
 
def middleOfThree(a, b, c):
     
    # Checking for b
    if ((a < b and b < c) or (c < b and b < a)) :
        return b;
 
    # Checking for a
    if ((b < a and a < c) or (c < a and a < b)) :
        return a;
 
    else :
        return c
 
# Driver Code
a = 20
b = 30
c = 40
print(middleOfThree(a, b, c))
 
# This code is contributed by rishabh_jain


C#




// C# program to find middle of
// three distinct numbers
using System;
 
class Middle
{
    // Function to find the middle of three number
    public static int middleOfThree(int a, int b,
                                        int c)
    {
        // Checking for b
        if ((a < b && b < c) || (c < b && b < a))
            return b;
 
        // Checking for a
        else if ((b < a && a < c) || (c < a && a < b))
        return a;
 
        else
        return c;
    }
     
    // Driver code
    public static void Main()
    {
        int a = 20, b = 30, c = 40;
        Console.WriteLine( middleOfThree(a, b, c) );
    }
}
 
// This code is contributed by vt_m


PHP




<?php
// PHP program to find middle
// of three distinct numbers
 
function middleOfThree($a, $b, $c)
{
     
    // Checking for b
    if (($a < $b && $b < $c) or
        ($c < $b && $b < $a))
    return $b;
 
    // Checking for a
    else if (($b < $a and $a < $c) or
             ($c < $a and $a < $b))
    return $a;
 
    else
    return $c;
}
 
    // Driver Code
    $a = 20;
    $b = 30;
    $c = 40;
    echo middleOfThree($a, $b, $c);
     
// This code is contributed by anuj_67.
?>


Javascript




<script>
 
// Javascript program to find  middle of three distinct
// numbers
 
function middleOfThree( a,  b, c)
{
    // Checking for b
    if ((a < b && b < c) || (c < b && b < a))
       return b;
 
    // Checking for a
    else if ((b < a && a < c) || (c < a && a < b))
       return a;
 
    else
       return c;
}
 
    // driver code
 
    let a = 20, b = 30, c = 40;
    document.write(middleOfThree(a, b, c));
     
</script>


Output

30

Time Complexity: O(1)
Auxiliary Space: O(1)

But approach used above is not efficient because of extra comparisons, which can be easily minimized. In case first part is false, it will execute remaining half to check the condition. This problem remains same if we are checking for a also. 

Better Approach (Needs less comparison):

C++




// CPP program to find middle of three distinct
// numbers
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the middle of three numbers
int middleOfThree(int a, int b, int c)
{
    // Compare each three number to find middle
    // number. Enter only if a > b
    if (a > b)
    {
        if (b > c)
            return b;
        else if (a > c)
            return c;
        else
            return a;
    }
    else
    {
        // Decided a is not greater than b.
        if (a > c)
            return a;
        else if (b > c)
            return c;
        else
            return b;
    }
}
 
// Driver Code
int main()
{
    int a = 20, b = 30, c = 40;
    cout << middleOfThree(a, b, c);
    return 0;
}


Java




// Java program to find middle of
// three distinct numbers
import java.util.*;
 
class Middle
{  
    // Function to find the middle of three number
    public static int middleOfThree(int a, int b,
                                          int c)
    {
        // Compare each three number to find
        // middle number. Enter only if a > b
        if (a > b)
        {
            if (b > c)
                return b;
            else if (a > c)
                return c;
            else
                return a;
        }
        else
        {
            // Decided a is not greater than b.
            if (a > c)
                return a;
            else if (b > c)
                return c;
            else
                return b;
        }
    }
     
    // driver code
    public static void main(String[] args)
    {
        int a = 20, b = 30, c = 40;
        System.out.println(middleOfThree(a, b, c));
    }
}
 
// This code is contributed by rishabh_jain


Python3




# Python3 program to find middle
# of three distinct numbers
 
# Function to find the middle of three numbers
def middleOfThree(a, b, c) :
     
    # Compare each three number to find
    # middle number. Enter only if a > b
    if a > b :
        if (b > c):
            return b
        elif (a > c) :
            return c
        else :
            return a
    else:
        # Decided a is not greater than b.
        if (a > c) :
            return a
        elif (b > c) :
            return c
        else :
            return b
 
# Driver Code
a = 20
b = 30
c = 40
print( middleOfThree(a, b, c) )
 
# This code is contributed by rishabh_jain


C#




// C# program to find middle of
// three distinct numbers
using System;
 
class Middle
{
    // Function to find the middle of three number
    public static int middleOfThree(int a, int b,
                                            int c)
    {
        // Compare each three number to find
        // middle number. Enter only if a > b
        if (a > b)
        {
            if (b > c)
                return b;
            else if (a > c)
                return c;
            else
                return a;
        }
        else
        {
            // Decided a is not greater than b.
            if (a > c)
                return a;
            else if (b > c)
                return c;
            else
                return b;
        }
    }
     
    // Driver code
    public static void Main()
    {
        int a = 20, b = 30, c = 40;
        Console.WriteLine(middleOfThree(a, b, c));
    }
}
 
// This code is contributed by vt_m


PHP




<?php
// PHP program to find middle
// of three distinct numbers
 
// Function to find the middle
// of three numbers
function middleOfThree( $a, $b, $c)
{
     
    // Compare each three number
    // to find middle number.
    // Enter only if a > b
    if ($a > $b)
    {
        if ($b > $c)
            return $b;
        else if ($a > $c)
            return $c;
        else
            return $a;
    }
    else
    {
         
        // Decided a is not
        // greater than b.
        if ($a > $c)
            return $a;
        else if ($b > $c)
            return $c;
        else
            return $b;
    }
}
 
    // Driver Code
    $a = 20; $b = 30;
    $c = 40;
    echo middleOfThree($a, $b, $c);
 
// This code is contributed by anuj_67.
?>


Javascript




<script>
    // Javascript program to find middle of three distinct numbers
     
    // Function to find the middle of three number
    function middleOfThree(a, b, c)
    {
        // Compare each three number to find
        // middle number. Enter only if a > b
        if (a > b)
        {
            if (b > c)
                return b;
            else if (a > c)
                return c;
            else
                return a;
        }
        else
        {
            // Decided a is not greater than b.
            if (a > c)
                return a;
            else if (b > c)
                return c;
            else
                return b;
        }
    }
     
    let a = 20, b = 30, c = 40;
    document.write(middleOfThree(a, b, c));
     
    // This code is contributed by divyesh072019.
</script>


Output

30

Time Complexity: O(1)
Auxiliary Space: O(1)
This approach is efficient and having less number of comparisons. Outer IF loop will only be executed if a > b otherwise, outer ELSE will be executed. 

Other Efficient Approach:

This approach is condensed version of the 1st approach.

(a>b and b>c) or (a<b and b<c) can also be decoded as a-b>0, b-c>0 or a-b<0,b-c<0 means the difference of a, b and b, c should be of same sign. So let x = a-b and y = b-c and if x, y have same sign then their result will be always positive. So b is middle element.

Similarly we can check for c and a.

let z = c – a and if  (b < a and a < c) or (c < a and a < b) can be decoded as a-b>0 , c-a>0 or a-b < 0, c-a<0 means x*z > 0. So the middle element will be a.

C++




// CPP program to find middle of three distinct
// numbers
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the middle of three number
int middleOfThree(int a, int b, int c)
{
    // x is positive if a is greater than b.
    // x is negative if b is greater than a.
    int x = a - b;
 
    int y = b - c;  // Similar to x
    int z = a - c;  // Similar to x and y.
 
    // Checking if b is middle (x and y both
    // are positive)
    if (x * y > 0)
        return b;
 
    // Checking if c is middle (x and z both
    // are positive)
    else if (x * z > 0)
        return c;
    else
        return a;
}
 
// Driver Code
int main()
{
    int a = 20, b = 30, c = 40;
    cout << middleOfThree(a, b, c);
    return 0;
}


Java




//java program to find middle of three distinct
// numbers
import java.util.*;
 
class Middle
{  
    // Function to find the middle of three number
    public static int middleOfThree(int a, int b,
                                          int c)
    {
        // x is positive if a is greater than b.
        // x is negative if b is greater than a.
        int x = a - b;
 
        int y = b - c; // Similar to x
        int z = a - c; // Similar to x and y.
 
        // Checking if b is middle (x and y
        // both are positive)
        if (x * y > 0)
            return b;
 
        // Checking if c is middle (x and z
        // both are positive)
        else if (x * z > 0)
            return c;
        else
            return a;
    }
     
    // driver code
    public static void main(String[] args)
    {
        int a = 20, b = 30, c = 40;
        System.out.println( middleOfThree(a, b, c) );
    }
}
 
// This code is contributed by rishabh_jain


Python3




# Python3 program to find middle
# of three distinct numbers
 
# Function to find the middle of three number
def middleOfThree(a, b, c) :
     
    # x is positive if a is greater than b.
    # x is negative if b is greater than a.
    x = a - b
 
    # Similar to x
    y = b - c
     
    # Similar to x and y.
    z = a - c
 
    # Checking if b is middle (x and y
    # both are positive)
    if x * y > 0:
        return b
 
    # Checking if c is middle (x and z
    # both are positive)
    elif (x * z > 0) :
        return c
    else :
        return a
 
# Driver Code
a = 20
b = 30
c = 40
print(middleOfThree(a, b, c))
 
# This code is contributed by rishabh_jain


C#




//C# program to find middle of three distinct
// numbers
using System;
 
class Middle
{
    // Function to find the middle of three number
    public static int middleOfThree(int a, int b,
                                        int c)
    {
        // x is positive if a is greater than b.
        // x is negative if b is greater than a.
        int x = a - b;
         
        // Similar to x
        int y = b - c;
         
         // Similar to x and y.
        int z = a - c;
 
        // Checking if b is middle (x and y
        // both are positive)
        if (x * y > 0)
            return b;
 
        // Checking if c is middle (x and z
        // both are positive)
        else if (x * z > 0)
            return c;
        else
            return a;
    }
     
    // Driver code
    public static void Main()
    {
        int a = 20, b = 30, c = 40;
        Console.WriteLine( middleOfThree(a, b, c) );
    }
}
 
// This code is contributed by vt_m


PHP




<?php
// PHP program to find middle
// of three distinct numbers
 
// Function to find the
// middle of three number
function middleOfThree($a, $b, $c)
{
     
    // x is positive if a
    // is greater than b.
    // x is negative if b
    // is greater than a.
    $x = $a - $b;
 
    // Similar to x
    $y = $b - $c;
     
    // Similar to x and y.
    $z = $a - $c;
 
    // Checking if b is
    // middle (x and y both
    // are positive)
    if ($x * $y > 0)
        return $b;
 
    // Checking if c is
    // middle (x and z both
    // are positive)
    else if ($x * $z > 0)
        return $c;
    else
        return $a;
}
 
    // Driver Code
    $a = 20;
    $b = 30;
    $c = 40;
    echo middleOfThree($a, $b, $c);
 
// This code is contributed by anuj_67.
?>


Javascript




<script>
 
// javascript program to find middle of
//  three distinct numbers
  
    // Function to find the middle of three number
    function middleOfThree(a, b, c)
    {
        // x is positive if a is greater than b.
        // x is negative if b is greater than a.
        let x = a - b;
  
        let y = b - c; // Similar to x
        let z = a - c; // Similar to x and y.
  
        // Checking if b is middle (x and y
        // both are positive)
        if (x * y > 0)
            return b;
  
        // Checking if c is middle (x and z
        // both are positive)
        else if (x * z > 0)
            return c;
        else
            return a;
    }
     
// Driver code
 
        let a = 20, b = 30, c = 40;
        document.write( middleOfThree(a, b, c) );
 
</script>


Output

30

Time Complexity: O(1)
Auxiliary Space: O(1)



Last Updated : 07 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads