fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <omp.h>
  4.  
  5. using namespace std;
  6.  
  7. void merge(vector<int>& arr, int l, int m, int r) {
  8. int i, j, k;
  9. int n1 = m - l + 1;
  10. int n2 = r - m;
  11. vector<int> L(n1), R(n2);
  12.  
  13. for (i = 0; i < n1; i++) {
  14. L[i] = arr[l + i];
  15. }
  16. for (j = 0; j < n2; j++) {
  17. R[j] = arr[m + 1 + j];
  18. }
  19.  
  20. i = 0;
  21. j = 0;
  22. k = l;
  23. while (i < n1 && j < n2) {
  24. if (L[i] <= R[j]) {
  25. arr[k++] = L[i++];
  26. } else {
  27. arr[k++] = R[j++];
  28. }
  29. }
  30. }
  31.  
  32. void merge_sort(vector<int>& arr, int l, int r) {
  33. if (l < r) {
  34. int m = l + (r - l) / 2;
  35. #pragma omp task
  36. merge_sort(arr, l, m);
  37. #pragma omp task
  38. merge_sort(arr, m + 1, r);
  39. merge(arr, l, m, r);
  40. }
  41. }
  42.  
  43. void parallel_merge_sort(vector<int>& arr) {
  44. #pragma omp parallel
  45. {
  46. #pragma omp single
  47. merge_sort(arr, 0, arr.size() - 1);
  48. }
  49. }
  50.  
  51. int main() {
  52. vector<int> arr = {5, 2, 9, 1, 7, 6, 8, 3, 4};
  53. double start, end;
  54.  
  55. // Measure performance of sequential merge sort
  56. start = omp_get_wtime();
  57. merge_sort(arr, 0, arr.size() - 1);
  58. end = omp_get_wtime();
  59. cout << "Sequential merge sort time: " << end - start << " seconds" << endl;
  60.  
  61. // Measure performance of parallel merge sort
  62. arr = {5, 2, 9, 1, 7, 6, 8, 3, 4};
  63. start = omp_get_wtime();
  64. parallel_merge_sort(arr);
  65. end = omp_get_wtime();
  66. cout << "Parallel merge sort time: " << end - start << " seconds" << endl;
  67.  
  68. return 0;
  69. }
  70.  
Success #stdin #stdout #stderr 0.32s 40456KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "using namespace"
Execution halted