ltdpaste

Merge Sort

Jun 16th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. void merge(int arr[], int l, int m, int r)
  2. {
  3. int i, j, k;
  4. int n1 = m - l + 1;
  5. int n2 = r - m;
  6.  
  7. /* create temp arrays */
  8. int L[n1], R[n2];
  9.  
  10. /* Copy data to temp arrays L[] and R[] */
  11. for (i = 0; i < n1; i++)
  12. L[i] = arr[l + i];
  13. for (j = 0; j < n2; j++)
  14. R[j] = arr[m + 1+ j];
  15.  
  16. /* Merge the temp arrays back into arr[l..r]*/
  17. i = 0; // Initial index of first subarray
  18. j = 0; // Initial index of second subarray
  19. k = l; // Initial index of merged subarray
  20. while (i < n1 && j < n2)
  21. {
  22. if (L[i] <= R[j])
  23. {
  24. arr[k] = L[i];
  25. i++;
  26. }
  27. else
  28. {
  29. arr[k] = R[j];
  30. j++;
  31. }
  32. k++;
  33. }
  34.  
  35. /* Copy the remaining elements of L[], if there
  36. are any */
  37. while (i < n1)
  38. {
  39. arr[k] = L[i];
  40. i++;
  41. k++;
  42. }
  43.  
  44. /* Copy the remaining elements of R[], if there
  45. are any */
  46. while (j < n2)
  47. {
  48. arr[k] = R[j];
  49. j++;
  50. k++;
  51. }
  52. }
  53.  
  54. /* l is for left index and r is right index of the
  55. sub-array of arr to be sorted */
  56. void mergeSort(int arr[], int l, int r)
  57. {
  58. if (l < r)
  59. {
  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. }
Advertisement
Add Comment
Please, Sign In to add comment