Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. // Merges two subarrays of arr[].
  2. // First subarray is arr[l..m]
  3. // Second subarray is arr[m+1..r]
  4. void merge(int arr[], int l, int m, int r)
  5. {
  6. int i, j, k;
  7. int n1 = m - l + 1;
  8. int n2 = r - m;
  9.  
  10. /* create temp arrays */
  11. int L[n1], R[n2];
  12.  
  13. /* Copy data to temp arrays L[] and R[] */
  14. for (i = 0; i < n1; i++)
  15. L[i] = arr[l + i];
  16. for (j = 0; j < n2; j++)
  17. R[j] = arr[m + 1+ j];
  18.  
  19. /* Merge the temp arrays back into arr[l..r]*/
  20. i = 0; // Initial index of first subarray
  21. j = 0; // Initial index of second subarray
  22. k = l; // Initial index of merged subarray
  23. while (i < n1 && j < n2)
  24. {
  25. if (L[i] <= R[j])
  26. {
  27. arr[k] = L[i];
  28. i++;
  29. }
  30. else
  31. {
  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. {
  42. arr[k] = L[i];
  43. i++;
  44. k++;
  45. }
  46.  
  47. /* Copy the remaining elements of R[], if there
  48. are any */
  49. while (j < n2)
  50. {
  51. arr[k] = R[j];
  52. j++;
  53. k++;
  54. }
  55. }
  56.  
  57. /* l is for left index and r is right index of the
  58. sub-array of arr to be sorted */
  59. void mergeSort(int arr[], int l, int r)
  60. {
  61. if (l < r)
  62. {
  63. // Same as (l+r)/2, but avoids overflow for
  64. // large l and h
  65. int m = l+(r-l)/2;
  66.  
  67. // Sort first and second halves
  68. mergeSort(arr, l, m);
  69. mergeSort(arr, m+1, r);
  70.  
  71. merge(arr, l, m, r);
  72. }
  73. }
  74.  
  75. void mysort(int *A, unsigned long int n) {
  76. mergeSort(A, 0, n - 1);
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement