fork download
  1. #include <stdio.h>
  2. #include <omp.h>
  3.  
  4. void merge(int arr[], int l, int m, int r) {
  5. int i = l, j = m+1, k = 0;
  6. int temp[100000];
  7.  
  8. while(i <= m && j <= r) {
  9. if(arr[i] < arr[j]) temp[k++] = arr[i++];
  10. else temp[k++] = arr[j++];
  11. }
  12.  
  13. while(i <= m) temp[k++] = arr[i++];
  14. while(j <= r) temp[k++] = arr[j++];
  15.  
  16. for(i = l, k = 0; i <= r; i++, k++)
  17. arr[i] = temp[k];
  18. }
  19.  
  20. void mergeSort(int arr[], int l, int r) {
  21. if(l < r) {
  22. int m = (l + r) / 2;
  23.  
  24. #pragma omp task
  25. mergeSort(arr, l, m);
  26.  
  27. #pragma omp task
  28. mergeSort(arr, m+1, r);
  29.  
  30. #pragma omp taskwait
  31. merge(arr, l, m, r);
  32. }
  33. }
  34.  
  35. int main() {
  36. int arr[10000];
  37.  
  38. // fill array
  39. for(int i = 0; i < 10000; i++)
  40. arr[i] = rand() % 1000;
  41.  
  42. #pragma omp parallel
  43. {
  44. #pragma omp single
  45. mergeSort(arr, 0, 9999);
  46. }
  47.  
  48. return 0;
  49. }
Success #stdin #stdout 0s 5292KB
stdin
Standard input is empty
stdout
Standard output is empty