Guest User

Untitled

a guest
Dec 16th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. void merge(double arr[], int l, int m, int r)
  2. {
  3. int counter = 0;//number of comparisons
  4. int i, j, k;
  5. int n1 = m - l + 1;
  6. int n2 = r - m;
  7. int cc;
  8. /* create temp arrays */
  9. double L[n1], R[n2];
  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. /* Merge the temp arrays back into arr[l..r]*/
  16. i = 0; // Initial index of first subarray
  17. j = 0; // Initial index of second subarray
  18. k = l; // Initial index of merged subarray
  19. while (i < n1 && j < n2)
  20. {
  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. counter++;
  34. }
  35. cout << counter << endl;
  36. /* Copy the remaining elements of L[], if there
  37. are any */
  38. while (i < n1)
  39. {
  40. arr[k] = L[i];
  41. i++;
  42. k++;
  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. void mergeSort(double arr[], int l, int r)
  54. {
  55. if (l < r)
  56. {
  57. // Same as (l+r)/2, but avoids overflow for
  58. // large l and h
  59. int m = l+(r-l)/2;
  60. // Sort first and second halves
  61. mergeSort(arr, l, m);
  62. mergeSort(arr, m+1, r);
  63. merge(arr, l, m, r);
  64. }
  65. }
Add Comment
Please, Sign In to add comment