fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <omp.h>
  4. using namespace std;
  5.  
  6. // Sequential Bubble Sort
  7. void bubbleSortSeq(vector<int>& arr) {
  8. int n = arr.size();
  9. for (int i = 0; i < n-1; i++)
  10. for (int j = 0; j < n-i-1; j++)
  11. if (arr[j] > arr[j+1])
  12. swap(arr[j], arr[j+1]);
  13. }
  14.  
  15. // Parallel Bubble Sort
  16. void bubbleSortPar(vector<int>& arr) {
  17. int n = arr.size();
  18. for (int i = 0; i < n; i++) {
  19. #pragma omp parallel for
  20. for (int j = i % 2; j < n - 1; j += 2)
  21. if (arr[j] > arr[j + 1])
  22. swap(arr[j], arr[j + 1]);
  23. }
  24. }
  25.  
  26. // Merge function
  27. void merge(vector<int>& arr, int l, int m, int r) {
  28. vector<int> left(arr.begin() + l, arr.begin() + m + 1);
  29. vector<int> right(arr.begin() + m + 1, arr.begin() + r + 1);
  30. int i = 0, j = 0, k = l;
  31. while (i < left.size() && j < right.size())
  32. arr[k++] = (left[i] < right[j]) ? left[i++] : right[j++];
  33. while (i < left.size()) arr[k++] = left[i++];
  34. while (j < right.size()) arr[k++] = right[j++];
  35. }
  36.  
  37. // Sequential Merge Sort
  38. void mergeSortSeq(vector<int>& arr, int l, int r) {
  39. if (l < r) {
  40. int m = (l + r) / 2;
  41. mergeSortSeq(arr, l, m);
  42. mergeSortSeq(arr, m + 1, r);
  43. merge(arr, l, m, r);
  44. }
  45. }
  46.  
  47. // Parallel Merge Sort
  48. void mergeSortPar(vector<int>& arr, int l, int r) {
  49. if (l < r) {
  50. int m = (l + r) / 2;
  51. #pragma omp parallel sections
  52. {
  53. #pragma omp section
  54. mergeSortPar(arr, l, m);
  55. #pragma omp section
  56. mergeSortPar(arr, m + 1, r);
  57. }
  58. merge(arr, l, m, r);
  59. }
  60. }
  61.  
  62. int main() {
  63. vector<int> data = {8, 5, 2, 9, 1, 4};
  64. vector<int> arr1 = data, arr2 = data;
  65. vector<int> arr3 = data, arr4 = data;
  66.  
  67. bubbleSortSeq(arr1);
  68. bubbleSortPar(arr2);
  69. mergeSortSeq(arr3, 0, arr3.size() - 1);
  70. mergeSortPar(arr4, 0, arr4.size() - 1);
  71.  
  72. cout << "Sorted (Seq Bubble): ";
  73. for (int x : arr1) cout << x << " ";
  74. cout << "\nSorted (Par Bubble): ";
  75. for (int x : arr2) cout << x << " ";
  76. cout << "\nSorted (Seq Merge): ";
  77. for (int x : arr3) cout << x << " ";
  78. cout << "\nSorted (Par Merge): ";
  79. for (int x : arr4) cout << x << " ";
  80. }
  81.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Sorted (Seq Bubble): 1 2 4 5 8 9 
Sorted (Par Bubble): 1 2 4 5 8 9 
Sorted (Seq Merge):  1 2 4 5 8 9 
Sorted (Par Merge):  1 2 4 5 8 9