forked from piyush-kash/Hacktober2021-cpp-py
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergeSort_using_pragma_openmp.cpp
More file actions
71 lines (55 loc) · 1.67 KB
/
MergeSort_using_pragma_openmp.cpp
File metadata and controls
71 lines (55 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll; //g++ ll.cpp -o ll.exe
typedef long double ld;
typedef pair<ll,ll> iii; //all elements to 0 .\ll.exe
const ll mod =1e9+7;
void mergeSortRecursive(vector<double>& v, unsigned long left, unsigned long right)
{
if (left < right)
{
if (right-left >= 8)
{
unsigned long mid = (left+right)/2;
#pragma omp taskgroup
{
#pragma omp task shared(v) untied if(right-left >= (1<<14))
mergeSortRecursive(v, left, mid);
#pragma omp task shared(v) untied if(right-left >= (1<<14))
mergeSortRecursive(v, mid+1, right);
#pragma omp taskyield
}
inplace_merge(v.begin()+left, v.begin()+mid+1, v.begin()+right+1);
}else
{
sort(v.begin()+left, v.begin()+right+1);
}
}
}
void mergeSort(vector<double>& v) {
#pragma omp parallel
#pragma omp single
mergeSortRecursive(v, 0, v.size()-1);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
vector<double> v(6);
v[0]=0.9;
v[1]=1457.6;
v[2]=565.5;
v[3]=45.5;
v[4]=0.58;
v[5]=68.547;
mergeSort(v);
for(int i=0;i<6;i++)
cout<<v[i]<<endl;
return 0;
}