Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.94 KB | None | 0 0
  1. void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) {
  2.         if (length < MIN_MERGE_SIZE*2L) {
  3.                 // Base case
  4.                 basicmerge(n, left, right, result, start, length);
  5.         } else {
  6.                 // Recursive decomposition
  7.                 tareador_start_task("merge");
  8.                 merge(n, left, right, result, start, length/2);
  9.                 tareador_end_task("merge");
  10.                 tareador_start_task("merge");
  11.                 merge(n, left, right, result, start + length/2, length/2);
  12.                 tareador_end_task("merge");
  13.         }
  14. }
  15.  
  16. void multisort(long n, T data[n], T tmp[n]) {
  17.         if (n >= MIN_SORT_SIZE*4L) {
  18.                 // Recursive decomposition
  19.                 tareador_start_task("multisort");
  20.                 multisort(n/4L, &data[0], &tmp[0]);
  21.                 tareador_end_task("multisort");
  22.                 tareador_start_task("multisort");
  23.                 multisort(n/4L, &data[n/4L], &tmp[n/4L]);
  24.                 tareador_end_task("multisort");
  25.                 tareador_start_task("multisort");
  26.                 multisort(n/4L, &data[n/2L], &tmp[n/2L]);
  27.                 tareador_end_task("multisort");
  28.                 tareador_start_task("multisort");
  29.                 multisort(n/4L, &data[3L*n/4L], &tmp[3L*n/4L]);
  30.                 tareador_end_task("multisort");
  31.  
  32.                 tareador_start_task("merge");
  33.                 merge(n/4L, &data[0], &data[n/4L], &tmp[0], 0, n/2L);
  34.                 tareador_end_task("merge");
  35.                 tareador_start_task("merge");
  36.                 merge(n/4L, &data[n/2L], &data[3L*n/4L], &tmp[n/2L], 0, n/2L);
  37.                 tareador_end_task("merge");
  38.                 tareador_start_task("merge");
  39.                 merge(n/2L, &tmp[0], &tmp[n/2L], &data[0], 0, n);
  40.                 tareador_end_task("merge");
  41.         } else {
  42.                 // Base case
  43.                 basicsort(n, data);
  44.  
  45.         }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement