Merge Sort in C Merge Sort in C++
#include <stdio.h> #include <iostream>
using namespace std;
void merge(int arr[], int l, int m, int r)
{ void merge(int arr[], int l, int m, int r)
int i, j, k; {
int n1 = m - l + 1; int i, j, k;
int n2 = r - m; int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
int L[n1], R[n2];
for (i = 0; i < n1; i++) for (i = 0; i < n1; i++)
L[i] = arr[l + i]; L[i] = arr[l + i];
for (j = 0; j < n2; j++) for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j]; R[j] = arr[m + 1 + j];
i = 0; i = 0; j = 0; k = l;
j = 0;
k = l; while (i < n1 && j < n2)
while (i < n1 && j < n2) {
{ if (L[i] <= R[j])
if (L[i] <= R[j]) {
{ arr[k] = L[i];
arr[k] = L[i]; i++;
i++; }
} else
else {
{ arr[k] = R[j];
arr[k] = R[j]; j++;
j++; }
} k++;
k++; }
}
while (i < n1) while (i < n1)
{ {
arr[k] = L[i]; arr[k] = L[i];
i++; i++;
k++; k++;
} }
while (j < n2)
{ while (j < n2)
arr[k] = R[j]; {
j++; arr[k] = R[j];
k++; j++;
} k++;
} }
}
void mergeSort(int arr[], int l, int r)
{ void mergeSort(int arr[], int l, int r)
if (l < r) {
{ if (l < r)
int m = l + (r - l) / 2; {
mergeSort(arr, l, m); int m = l + (r - l) / 2;
mergeSort(arr, m + 1, r); mergeSort(arr, l, m);
merge(arr, l, m, r); mergeSort(arr, m + 1, r);
} merge(arr, l, m, r);
} }
}
void printArray(int A[], int size)
{ void printArray(int A[], int size)
int i; {
for (i = 0; i < size; i++) int i;
printf("%d ", A[i]); for (i = 0; i < size; i++)
printf("\n"); cout << A[i] << " ";
} cout << endl;
}
int main()
{ int main()
int arr[] = {12, 11, 13, 5, 6, 7}; {
int arr_size = sizeof(arr) / sizeof(arr[0]); int arr[] = {12, 11, 13, 5, 6, 7};
int arr_size = sizeof(arr) / sizeof(arr[0]);
printf("Given array is \n");
printArray(arr, arr_size); cout << "Given array is \n";
printArray(arr, arr_size);
mergeSort(arr, 0, arr_size - 1);
mergeSort(arr, 0, arr_size - 1);
printf("\nSorted array is \n");
printArray(arr, arr_size); cout << "\nSorted array is \n";
return 0; printArray(arr, arr_size);
} return 0;
}
Merge Sort in Java Merge Sort in Python
class MergeSort { def merge_sort(arr):
void merge(int arr[], int l, int m, int r) { if len(arr) > 1:
int n1 = m - l + 1; mid = len(arr) // 2
int n2 = r - m; L = arr[:mid]
R = arr[mid:]
int L[] = new int[n1];
int R[] = new int[n2]; merge_sort(L)
merge_sort(R)
for (int i = 0; i < n1; ++i)
L[i] = arr[l + i]; i = j = k = 0
for (int j = 0; j < n2; ++j)
R[j] = arr[m + 1 + j]; while i < len(L) and j < len(R):
if L[i] < R[j]:
int i = 0, j = 0; arr[k] = L[i]
int k = l; i += 1
while (i < n1 && j < n2) { else:
if (L[i] <= R[j]) { arr[k] = R[j]
arr[k] = L[i]; j += 1
i++; k += 1
} else {
arr[k] = R[j]; while i < len(L):
j++; arr[k] = L[i]
} i += 1
k++; k += 1
}
while j < len(R):
while (i < n1) { arr[k] = R[j]
arr[k] = L[i]; j += 1
i++; k += 1
k++;
} def print_array(arr):
for i in range(len(arr)):
while (j < n2) { print(arr[i], end=" ")
arr[k] = R[j]; print()
j++;
k++; arr = [12, 11, 13, 5, 6, 7]
} print("Given array is", end="\n")
} print_array(arr)
void sort(int arr[], int l, int r) { merge_sort(arr)
if (l < r) { print("Sorted array is: ", end="\n")
int m = (l + r) / 2; print_array(arr)
sort(arr, l, m);
sort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
static void printArray(int arr[]) {
int n = [Link];
for (int i = 0; i < n; ++i)
[Link](arr[i] + " ");
[Link]();
}
public static void main(String args[]) {
int arr[] = { 12, 11, 13, 5, 6, 7 };
[Link]("Given Array");
printArray(arr);
MergeSort ob = new MergeSort();
[Link](arr, 0, [Link] - 1);
[Link]("\nSorted array");
printArray(arr);
}
}