Middle of three using minimum comparisons
Last Updated :
07 Jul, 2022
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++
#include <bits/stdc++.h>
using namespace std;
int middleOfThree( int a, int b, int c)
{
if ((a < b && b < c) || (c < b && b < a))
return b;
else if ((b < a && a < c) || (c < a && a < b))
return a;
else
return c;
}
int main()
{
int a = 20, b = 30, c = 40;
cout << middleOfThree(a, b, c);
return 0;
}
|
Java
import java.util.*;
class Middle
{
public static int middleOfThree( int a, int b,
int c)
{
if ((a < b && b < c) || (c < b && b < a))
return b;
else if ((b < a && a < c) || (c < a && a < b))
return a;
else
return c;
}
public static void main(String[] args)
{
int a = 20 , b = 30 , c = 40 ;
System.out.println( middleOfThree(a, b, c) );
}
}
|
Python3
def middleOfThree(a, b, c):
if ((a < b and b < c) or (c < b and b < a)) :
return b;
if ((b < a and a < c) or (c < a and a < b)) :
return a;
else :
return c
a = 20
b = 30
c = 40
print (middleOfThree(a, b, c))
|
C#
using System;
class Middle
{
public static int middleOfThree( int a, int b,
int c)
{
if ((a < b && b < c) || (c < b && b < a))
return b;
else if ((b < a && a < c) || (c < a && a < b))
return a;
else
return c;
}
public static void Main()
{
int a = 20, b = 30, c = 40;
Console.WriteLine( middleOfThree(a, b, c) );
}
}
|
PHP
<?php
function middleOfThree( $a , $b , $c )
{
if (( $a < $b && $b < $c ) or
( $c < $b && $b < $a ))
return $b ;
else if (( $b < $a and $a < $c ) or
( $c < $a and $a < $b ))
return $a ;
else
return $c ;
}
$a = 20;
$b = 30;
$c = 40;
echo middleOfThree( $a , $b , $c );
?>
|
Javascript
<script>
function middleOfThree( a, b, c)
{
if ((a < b && b < c) || (c < b && b < a))
return b;
else if ((b < a && a < c) || (c < a && a < b))
return a;
else
return c;
}
let a = 20, b = 30, c = 40;
document.write(middleOfThree(a, b, c));
</script>
|
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++
#include <bits/stdc++.h>
using namespace std;
int middleOfThree( int a, int b, int c)
{
if (a > b)
{
if (b > c)
return b;
else if (a > c)
return c;
else
return a;
}
else
{
if (a > c)
return a;
else if (b > c)
return c;
else
return b;
}
}
int main()
{
int a = 20, b = 30, c = 40;
cout << middleOfThree(a, b, c);
return 0;
}
|
Java
import java.util.*;
class Middle
{
public static int middleOfThree( int a, int b,
int c)
{
if (a > b)
{
if (b > c)
return b;
else if (a > c)
return c;
else
return a;
}
else
{
if (a > c)
return a;
else if (b > c)
return c;
else
return b;
}
}
public static void main(String[] args)
{
int a = 20 , b = 30 , c = 40 ;
System.out.println(middleOfThree(a, b, c));
}
}
|
Python3
def middleOfThree(a, b, c) :
if a > b :
if (b > c):
return b
elif (a > c) :
return c
else :
return a
else :
if (a > c) :
return a
elif (b > c) :
return c
else :
return b
a = 20
b = 30
c = 40
print ( middleOfThree(a, b, c) )
|
C#
using System;
class Middle
{
public static int middleOfThree( int a, int b,
int c)
{
if (a > b)
{
if (b > c)
return b;
else if (a > c)
return c;
else
return a;
}
else
{
if (a > c)
return a;
else if (b > c)
return c;
else
return b;
}
}
public static void Main()
{
int a = 20, b = 30, c = 40;
Console.WriteLine(middleOfThree(a, b, c));
}
}
|
PHP
<?php
function middleOfThree( $a , $b , $c )
{
if ( $a > $b )
{
if ( $b > $c )
return $b ;
else if ( $a > $c )
return $c ;
else
return $a ;
}
else
{
if ( $a > $c )
return $a ;
else if ( $b > $c )
return $c ;
else
return $b ;
}
}
$a = 20; $b = 30;
$c = 40;
echo middleOfThree( $a , $b , $c );
?>
|
Javascript
<script>
function middleOfThree(a, b, c)
{
if (a > b)
{
if (b > c)
return b;
else if (a > c)
return c;
else
return a;
}
else
{
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));
</script>
|
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++
#include <bits/stdc++.h>
using namespace std;
int middleOfThree( int a, int b, int c)
{
int x = a - b;
int y = b - c;
int z = a - c;
if (x * y > 0)
return b;
else if (x * z > 0)
return c;
else
return a;
}
int main()
{
int a = 20, b = 30, c = 40;
cout << middleOfThree(a, b, c);
return 0;
}
|
Java
import java.util.*;
class Middle
{
public static int middleOfThree( int a, int b,
int c)
{
int x = a - b;
int y = b - c;
int z = a - c;
if (x * y > 0 )
return b;
else if (x * z > 0 )
return c;
else
return a;
}
public static void main(String[] args)
{
int a = 20 , b = 30 , c = 40 ;
System.out.println( middleOfThree(a, b, c) );
}
}
|
Python3
def middleOfThree(a, b, c) :
x = a - b
y = b - c
z = a - c
if x * y > 0 :
return b
elif (x * z > 0 ) :
return c
else :
return a
a = 20
b = 30
c = 40
print (middleOfThree(a, b, c))
|
C#
using System;
class Middle
{
public static int middleOfThree( int a, int b,
int c)
{
int x = a - b;
int y = b - c;
int z = a - c;
if (x * y > 0)
return b;
else if (x * z > 0)
return c;
else
return a;
}
public static void Main()
{
int a = 20, b = 30, c = 40;
Console.WriteLine( middleOfThree(a, b, c) );
}
}
|
PHP
<?php
function middleOfThree( $a , $b , $c )
{
$x = $a - $b ;
$y = $b - $c ;
$z = $a - $c ;
if ( $x * $y > 0)
return $b ;
else if ( $x * $z > 0)
return $c ;
else
return $a ;
}
$a = 20;
$b = 30;
$c = 40;
echo middleOfThree( $a , $b , $c );
?>
|
Javascript
<script>
function middleOfThree(a, b, c)
{
let x = a - b;
let y = b - c;
let z = a - c;
if (x * y > 0)
return b;
else if (x * z > 0)
return c;
else
return a;
}
let a = 20, b = 30, c = 40;
document.write( middleOfThree(a, b, c) );
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...