# How to calculate median from array values in java / Calculating median of integer array in java

What is Median ?

Median of a sequence(or an array) of numbers is the middle element of the sequence when the total number of elements is odd or the average of middle elements when the total number of elements is even, provided the sequence is sorted. Example,

When total elements are odd

Consider the sequence: 2, 3, 6, 12, 15, 34, 65, 78, 99
Total number of elements:     9(odd)
Median will be 5th element: 15

When total elements are even

Consider the sequence: 2, 3, 6, 12, 15, 34, 65, 78
Total number of elements:     8(even)
Median will be average of 5th element: (12 + 15)/2 = 13.5

Thus,

If n is odd then Median (M) = value of ((n + 1)/2)th item term.
If n is even then Median (M) = value of [((n)/2)th item term + ((n)/2 + 1)th item term ]/2
where,
n is the total number of elements in the sequence or array.

How to calculate Median in java

Following are the different ways in which you can calculate median in a java program.

Method 1 : Finding the middle element

Program is given below

```public class MedianFinder { public static void main(String[] args) { // initialize array with odd number of element int[] values = { 2, 3, 6, 12, 15, 34, 65, 78, 99 }; // calculate median double median = median(values); System.out.println("Median is : " + median); // re-initialize array with even number of element values = { 2, 3, 6, 12, 15, 34, 65, 78}; // calculate median median = median(values); System.out.println("Median is : " + median); }   static double median(int[] values) { // sort array Arrays.sort(values); double median; // get count of scores int totalElements = values.length; // check if total number of scores is even if (totalElements % 2 == 0) { int sumOfMiddleElements = values[totalElements / 2] + values[totalElements / 2 - 1]; // calculate average of middle elements median = ((double) sumOfMiddleElements) / 2; } else { // get the middle element median = (double) values[values.length / 2]; } return median; } }```

Above program initializes arrays with an odd number of elements and even number of elements and passes these arrays to a method which calculates median. This method firsts sorts the array using `sort` method of `java.util.Arrays` class.
After this, it checks if the total number of elements of array is even or odd by taking modulus of total elements with 2 and comparing the remainder with 0. If the remainder is 0, the number of elements are even else they are odd.
If the total elements are odd, then it retrieves the middle element by dividing the total number of elements by 2.
If the total elements are even, then it calculates the sum of middle two elements(12 and 15) and divides this sum by 2 to calculate the average of middle elements.

Output

Median is : 15
Median is : 13.5

Method 2 : Using Apache Math Library

Apache Math library provides many utility classes and methods to calculate mathematical entities and solution to programming problems such as mean, median, matrix operations, complex numbers, probability distribution and many more.
This library has a class `Median` in package `org.apache.commons.math3.stat.descriptive.rank`. This class has a median method which takes an array and returns the median value from these array elements.
`median` method takes a `double` array as argument. Thus if you have an integer array, then you need to convert it to an array of `double` elements.

Usage of this library to calculate median is shown below

```public class MedianFinder { public static void main(String[] args) { // initialize array double[] values = { 1.2, 3, 4, 5, 8 }; // calculate median double median = median(values); System.out.println("Median is : " + median); }   static double median(double[] values) { // create an object of Median class Median median = new Median(); // calculate median double evaluate = median.evaluate(values); return median; } }```

Output

Median is : 4.0

Note that now no sorting of array is required and you do not need to check the size of the array and provide different handling as per the total elements being odd or even, the library handles this stuff itself.

Apache commons library can be found at this link.