Merge Sort in Data Structure and Algorithm — with Implementation in C++, Java and Python
Merge Sort is a stable, divide-and-conquer sorting algorithm. It recursively splits the array into halves, sorts each half, and then merges the two sorted halves back together.
Algorithm Steps
- Divide the array into two halves.
- Recursively sort each half.
- Merge the two sorted halves into a single sorted array.
Python Implementation
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left, right):
result, i, j = [], 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i]); i += 1
else:
result.append(right[j]); j += 1
result.extend(left[i:])
result.extend(right[j:])
return result
Java Implementation
void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
temp[k++] = (arr[i] <= arr[j]) ? arr[i++] : arr[j++];
}
while (i <= mid) temp[k++] = arr[i++];
while (j <= right) temp[k++] = arr[j++];
System.arraycopy(temp, 0, arr, left, temp.length);
}
C++ Implementation
void merge(vector<int>& arr, int left, int mid, int right) {
vector<int> temp;
int i = left, j = mid + 1;
while (i <= mid && j <= right)
temp.push_back(arr[i] <= arr[j] ? arr[i++] : arr[j++]);
while (i <= mid) temp.push_back(arr[i++]);
while (j <= right) temp.push_back(arr[j++]);
for (int k = 0; k < temp.size(); k++) arr[left + k] = temp[k];
}
void mergeSort(vector<int>& arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
Complexity
| Case | Time | Space |
|---|---|---|
| Best/Average/Worst | O(n log n) | O(n) |
Applications
- External sorting for datasets too large to fit in memory.
- Stable sorting requirements, such as sorting records by multiple keys.
- Used internally in Python's Timsort and Java's Collections.sort for objects.
PreviousInsertion Sort in Data Structure — Algorithm, Working and Advantages
Next Counting Sort in Data Structure
Ready to master Data Structures & Algorithms?
Learn DSA hands-on with mentor-led sessions, real interview practice, and placement support.
.png)