Given an array **arr[]** of positive integers of even length, the task is to partition these elements of **arr[]** into two groups each of odd length such that the absolute difference between the median of the two groups is minimized.

**Examples:**

Input:arr[] = { 1, 2, 3, 4, 5, 6 }

Output:1

Explanation:

Group 1 can be [2, 4, 6] with median 4

Group 2 can be [1, 3, 5] with median 3.

The absolute difference between the two medians is 4 – 3 = 1, which can’t be minimized further with any kind of groupings formed.

Input:arr[] = { 15, 25, 35, 50 }

Output:10

Explanation:

Group 1 can be [15, 25, 50] with median 25

Group 2 can be [35] with median 35.

The absolute difference between the two medians is 35 – 25 = 10, which can’t be minimized further with any kind of groupings formed.

**Approach:**

- If the given array
**arr[]**is sorted, the middle elements of**arr[]**will give the minimum difference. - So divide the
**arr[]**in such a way that these two elements will be the median of two new arrays of odd length. - Therefore, put the
**n/2**element of the arr[] in the first group and the^{th}**(n/2 – 1)**element of the^{th}**arr[]**in the second group as a median respectively. - Then
**abs(arr[n/2] – arr[(n/2)-1])**is the minimum difference between the two new arrays.

Below is the implementation of the above approach:

## C++

`// C++ program to minimise the ` `// median between partition array ` ` ` `#include "bits/stdc++.h" ` `using` `namespace` `std; ` ` ` `// Function to find minimise the ` `// median between partition array ` `int` `minimiseMedian(` `int` `arr[], ` `int` `n) ` `{ ` ` ` `// Sort the given array arr[] ` ` ` `sort(arr, arr + n); ` ` ` ` ` `// Return the difference of two ` ` ` `// middle element of the arr[] ` ` ` `return` `abs` `(arr[n / 2] - arr[(n / 2) - 1]); ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `arr[] = { 15, 25, 35, 50 }; ` ` ` ` ` `// Size of arr[] ` ` ` `int` `n = ` `sizeof` `(arr) / ` `sizeof` `(arr[0]); ` ` ` ` ` `// Function that returns the minimum ` ` ` `// the absolute difference between ` ` ` `// median of partition array ` ` ` `cout << minimiseMedian(arr, n); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to minimise the ` `// median between partition array ` `import` `java.util.*; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to find minimise the ` ` ` `// median between partition array ` ` ` `static` `int` `minimiseMedian(` `int` `arr[], ` `int` `n) ` ` ` `{ ` ` ` `// Sort the given array arr[] ` ` ` `Arrays.sort(arr); ` ` ` ` ` `// Return the difference of two ` ` ` `// middle element of the arr[] ` ` ` `return` `Math.abs(arr[n / ` `2` `] - arr[(n / ` `2` `) - ` `1` `]); ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `int` `arr[] = { ` `15` `, ` `25` `, ` `35` `, ` `50` `}; ` ` ` ` ` `// Size of arr[] ` ` ` `int` `n = arr.length; ` ` ` ` ` `// Function that returns the minimum ` ` ` `// the absolute difference between ` ` ` `// median of partition array ` ` ` `System.out.println(minimiseMedian(arr, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by AnkitRai01 ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to minimise the ` `# median between partition array ` ` ` `# Function to find minimise the ` `# median between partition array ` `def` `minimiseMedian(arr, n) : ` ` ` ` ` `# Sort the given array arr[] ` ` ` `arr.sort(); ` ` ` ` ` `# Return the difference of two ` ` ` `# middle element of the arr[] ` ` ` `ans ` `=` `abs` `(arr[n ` `/` `/` `2` `] ` `-` `arr[(n ` `/` `/` `2` `) ` `-` `1` `]); ` ` ` ` ` `return` `ans; ` ` ` `# Driver Code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` ` ` `arr ` `=` `[ ` `15` `, ` `25` `, ` `35` `, ` `50` `]; ` ` ` ` ` `# Size of arr[] ` ` ` `n ` `=` `len` `(arr); ` ` ` ` ` `# Function that returns the minimum ` ` ` `# the absolute difference between ` ` ` `# median of partition array ` ` ` `print` `(minimiseMedian(arr, n)); ` ` ` `# This code is contributed by AnkitRai01 ` |

*chevron_right*

*filter_none*

## C#

`// C# program to minimise the ` `// median between partition array ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to find minimise the ` ` ` `// median between partition array ` ` ` `static` `int` `minimiseMedian(` `int` `[]arr, ` `int` `n) ` ` ` `{ ` ` ` `// Sort the given array []arr ` ` ` `Array.Sort(arr); ` ` ` ` ` `// Return the difference of two ` ` ` `// middle element of the []arr ` ` ` `return` `Math.Abs(arr[n / 2] - arr[(n / 2) - 1]); ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `Main(String[] args) ` ` ` `{ ` ` ` `int` `[]arr = { 15, 25, 35, 50 }; ` ` ` ` ` `// Size of []arr ` ` ` `int` `n = arr.Length; ` ` ` ` ` `// Function that returns the minimum ` ` ` `// the absolute difference between ` ` ` `// median of partition array ` ` ` `Console.WriteLine(minimiseMedian(arr, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by 29AjayKumar ` |

*chevron_right*

*filter_none*

**Output:**

10

**Time Complexity:** O(N*log N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.