fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Merges two subarrays of arr[].
  5. // First subarray is arr[l..m]
  6. // Second subarray is arr[m+1..r]
  7. void merge(int arr[], int l, int m, int r)
  8. {
  9. int i, j, k;
  10. int n1 = m - l + 1;
  11. int n2 = r - m;
  12.  
  13. /* create temp arrays */
  14. int L[n1], R[n2];
  15.  
  16. /* Copy data to temp arrays L[] and R[] */
  17. for (i = 0; i < n1; i++)
  18. L[i] = arr[l + i];
  19. for (j = 0; j < n2; j++)
  20. R[j] = arr[m + 1 + j];
  21.  
  22. /* Merge the temp arrays back into arr[l..r]*/
  23. i = 0; // Initial index of first subarray
  24. j = 0; // Initial index of second subarray
  25. k = l; // Initial index of merged subarray
  26. while (i < n1 && j < n2) {
  27. if (L[i] <= R[j]) {
  28. arr[k] = L[i];
  29. i++;
  30. }
  31. else {
  32. arr[k] = R[j];
  33. j++;
  34. }
  35. k++;
  36. }
  37.  
  38. /* Copy the remaining elements of L[], if there
  39.   are any */
  40. while (i < n1) {
  41. arr[k] = L[i];
  42. i++;
  43. k++;
  44. }
  45.  
  46. /* Copy the remaining elements of R[], if there
  47.   are any */
  48. while (j < n2) {
  49. arr[k] = R[j];
  50. j++;
  51. k++;
  52. }
  53. }
  54.  
  55. /* l is for left index and r is right index of the
  56.   sub-array of arr to be sorted */
  57. void mergeSort(int arr[], int l, int r)
  58. {
  59. if (l < r) {
  60. // Same as (l+r)/2, but avoids overflow for
  61. // large l and h
  62. int m = l + (r - l) / 2;
  63.  
  64. // Sort first and second halves
  65. mergeSort(arr, l, m);
  66. mergeSort(arr, m + 1, r);
  67.  
  68. merge(arr, l, m, r);
  69. }
  70. }
  71.  
  72. /* UTILITY FUNCTIONS */
  73. /* Function to print an array */
  74. void printArray(int A[], int size)
  75. {
  76. int i;
  77. for (i = 0; i < size; i++)
  78. printf("%d ", A[i]);
  79. printf("\n");
  80. }
  81.  
  82. /* Driver program to test above functions */
  83. int main()
  84. {
  85. int arr[] = { 12, 11, 13, 5, 6, 7 };
  86. int arr_size = sizeof(arr) / sizeof(arr[0]);
  87.  
  88. printf("Given array is \n");
  89. printArray(arr, arr_size);
  90.  
  91. mergeSort(arr, 0, arr_size - 1);
  92.  
  93. printf("\nSorted array is \n");
  94. printArray(arr, arr_size);
  95. return 0;
  96. }
Success #stdin #stdout 0s 4472KB
stdin
Standard input is empty
stdout
Given array is 
12 11 13 5 6 7 

Sorted array is 
5 6 7 11 12 13