#include<stdio.h>
void merge(int arr[], int l, int m, int r) {
int i, j, k, nl, nr;
nl = m-l+1; nr = r-m;
int larr[nl], rarr[nr];
for(i = 0; i<nl; i++)
larr[i] = arr[l+i];
for(j = 0; j<nr; j++)
rarr[j] = arr[m+1+j];
i = 0; j = 0; k = l;
while(i < nl && j<nr) {
if(larr[i] <= rarr[j]) {
arr[k] = larr[i];
i++;
}else{
arr[k] = rarr[j];
j++;
}
k++;
}
while(i<nl) {
arr[k] = larr[i];
i++; k++;
}
while(j<nr) {
arr[k] = rarr[j];
j++; k++;
}
}
void mergeSort(int arr[], int l, int r) {
int m;
if(l < r) {
int m = l+(r-l)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l, m, r);
}
}
void printArray(int a[], int size) {
int i;
for (i=0; i < size; i++)
printf("%d ", a[i]);
printf("\n");
}
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int len = sizeof(arr)/sizeof(arr[0]);
printf("Given array: \n");
printArray(arr, len);
mergeSort(arr, 0, len - 1);
printf("\nSorted array: \n");
printArray(arr, len);
return 0;
}