/* C program for Merge Sort */#include<stdio.h>#include<stdlib.h>// Merges two subarrays of arr[].// First subarray is arr[l..m]// Second subarray is arr[m+1..r]voidmerge(int arr[],int l,int m,int r){int i, j, k;int n1 = m - l +1;int n2 = r - m;/* create temp arrays */int L[n1], R[n2];/* Copy data to temp arrays L[] and R[] */for(i =0; i < n1; i++)
L[i]= arr[l + i];for(j =0; j < n2; j++)
R[j]= arr[m +1+ j];/* Merge the temp arrays back into arr[l..r]*/
i =0;// Initial index of first subarray
j =0;// Initial index of second subarray
k = l;// Initial index of merged subarraywhile(i < n1 && j < n2){if(L[i]<= R[j]){
arr[k]= L[i];
i++;}else{
arr[k]= R[j];
j++;}
k++;}/* Copy the remaining elements of L[], if there
are any */while(i < n1){
arr[k]= L[i];
i++;
k++;}/* Copy the remaining elements of R[], if there
are any */while(j < n2){
arr[k]= R[j];
j++;
k++;}}/* l is for left index and r is right index of the
sub-array of arr to be sorted */voidmergeSort(int arr[],int l,int r){if(l < r){// Same as (l+r)/2, but avoids overflow for// large l and hint m = l +(r - l)/2;// Sort first and second halvesmergeSort(arr, l, m);mergeSort(arr, m +1, r);merge(arr, l, m, r);}}/* UTILITY FUNCTIONS *//* Function to print an array */voidprintArray(int A[],int size){int i;for(i =0; i < size; i++)printf("%d ", A[i]);printf("
");}/* Driver code */intmain(){int arr[]={12,11,13,5,6,7};int arr_size =sizeof(arr)/sizeof(arr[0]);printf("Given array is
");printArray(arr, arr_size);mergeSort(arr,0, arr_size -1);printf("
Sorted array is
");printArray(arr, arr_size);return0;}
// Merge sort in C#include<stdio.h>// Merge two subarrays L and M into arrvoidmerge(int arr[],int p,int q,int r){// Create L ← A[p..q] and M ← A[q+1..r]int n1 = q - p +1;int n2 = r - q;int L[n1], M[n2];for(int i =0; i < n1; i++)
L[i]= arr[p + i];for(int j =0; j < n2; j++)
M[j]= arr[q +1+ j];// Maintain current index of sub-arrays and main arrayint i, j, k;
i =0;
j =0;
k = p;// Until we reach either end of either L or M, pick larger among// elements L and M and place them in the correct position at A[p..r]while(i < n1 && j < n2){if(L[i]<= M[j]){
arr[k]= L[i];
i++;}else{
arr[k]= M[j];
j++;}
k++;}// When we run out of elements in either L or M,// pick up the remaining elements and put in A[p..r]while(i < n1){
arr[k]= L[i];
i++;
k++;}while(j < n2){
arr[k]= M[j];
j++;
k++;}}// Divide the array into two subarrays, sort them and merge themvoidmergeSort(int arr[],int l,int r){if(l < r){// m is the point where the array is divided into two subarraysint m = l +(r - l)/2;mergeSort(arr, l, m);mergeSort(arr, m +1, r);// Merge the sorted subarraysmerge(arr, l, m, r);}}// Print the arrayvoidprintArray(int arr[],int size){for(int i =0; i < size; i++)printf("%d ", arr[i]);printf("
");}// Driver programintmain(){int arr[]={6,5,12,10,9,1};int size =sizeof(arr)/sizeof(arr[0]);mergeSort(arr,0, size -1);printf("Sorted array:
");printArray(arr, size);}