Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) {
- if (length < MIN_MERGE_SIZE*2L) {
- // Base case
- basicmerge(n, left, right, result, start, length);
- } else {
- // Recursive decomposition
- tareador_start_task("merge");
- merge(n, left, right, result, start, length/2);
- tareador_end_task("merge");
- tareador_start_task("merge");
- merge(n, left, right, result, start + length/2, length/2);
- tareador_end_task("merge");
- }
- }
- void multisort(long n, T data[n], T tmp[n]) {
- if (n >= MIN_SORT_SIZE*4L) {
- // Recursive decomposition
- tareador_start_task("multisort");
- multisort(n/4L, &data[0], &tmp[0]);
- tareador_end_task("multisort");
- tareador_start_task("multisort");
- multisort(n/4L, &data[n/4L], &tmp[n/4L]);
- tareador_end_task("multisort");
- tareador_start_task("multisort");
- multisort(n/4L, &data[n/2L], &tmp[n/2L]);
- tareador_end_task("multisort");
- tareador_start_task("multisort");
- multisort(n/4L, &data[3L*n/4L], &tmp[3L*n/4L]);
- tareador_end_task("multisort");
- tareador_start_task("merge");
- merge(n/4L, &data[0], &data[n/4L], &tmp[0], 0, n/2L);
- tareador_end_task("merge");
- tareador_start_task("merge");
- merge(n/4L, &data[n/2L], &data[3L*n/4L], &tmp[n/2L], 0, n/2L);
- tareador_end_task("merge");
- tareador_start_task("merge");
- merge(n/2L, &tmp[0], &tmp[n/2L], &data[0], 0, n);
- tareador_end_task("merge");
- } else {
- // Base case
- basicsort(n, data);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement