Java Program for Merge Sort
Last Updated :
23 Oct, 2024
Improve
Merge Sort is a divide-and-conquer algorithm. It divides the input array into two halves, calls itself the two halves, and then merges the two sorted halves. The merge() function is used for merging two halves. The merge(arr, l, m, r) is a key process that assumes that arr[l..m] and arr[m+1..r] are sorted and merges the two sorted sub-arrays into one.
Please refer complete article on Merge Sort for more details.
Merge Sort Algorithm
There are only five steps to understand Merge Sort Algorithm:
- Step 1: Divide Array into Two Parts.
- Step 2: Merge Sort the first part of the array.
- Step 3: Merge Sort the second part of the array.
- Step 4: Merge Both the parts.
- Step 5: Return the Sorted Array
Base Conditions for Merge Sort is: Divide the Array till the size of Array is greater than 1.
Program of Merge Sort in Java
// Java program for Merge Sort
class MergeSort {
// Merges two subarrays of a[]
void merge(int a[], int l, int m, int r)
{
int n1 = m - l + 1;
int n2 = r - m;
int L[] = new int[n1];
int R[] = new int[n2];
for (int i = 0; i < n1; ++i)
L[i] = a[l + i];
for (int j = 0; j < n2; ++j)
R[j] = a[m + 1 + j];
// Merge the temp arrays
// Initial indexes of first and second subarrays
int i = 0, j = 0;
int k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
a[k] = L[i];
i++;
}
else {
a[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
a[k] = L[i];
i++;
k++;
}
while (j < n2) {
a[k] = R[j];
j++;
k++;
}
}
// Main function that sorts a[l..r] using
// merge()
void sort(int a[], int l, int r)
{
if (l < r) {
int m = (l + r) / 2;
// Sort first and second halves
sort(a, l, m);
sort(a, m + 1, r);
// Merge the sorted halves
merge(a, l, m, r);
}
}
// Driver method
public static void main(String args[])
{
int a[] = { 12, 11, 13, 5, 6, 7 };
// Calling of Merge Sort
MergeSort ob = new MergeSort();
ob.sort(a, 0, a.length - 1);
int n = a.length;
for (int i = 0; i < n; ++i)
System.out.print(a[i] + " ");
}
}
Output
5 6 7 11 12 13
The complexity of the above method:
Time Complexity: O(n log n)
Auxiliary Space: O(n)
Advantages of Merge Sort
The advantages of Merge Sort are mentioned below:
- Stability: Merge sort is a stable sorting algorithm, which means it maintains the relative order of equal elements in the input array.
- Guaranteed worst-case performance: Merge sort has a worst-case time complexity of O(n log n), which means it performs well even on large datasets.
- Parallelizable: Merge sort is a naturally parallelizable algorithm, which means it can be easily parallelized to take advantage of multiple processors or threads.
References: Please refer complete article on Merge Sort for more details.