Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <omp.h>
  3.  
  4.  
  5.  
  6. int main()
  7. {
  8. int n=4;
  9. // 2*n = 2^(m+1)
  10. int m = 2;
  11. int i, j, k;
  12. int A[] = { 2, 6, 3, 8 };
  13. int *P = (int *)malloc(n * sizeof(int));
  14. int **R = (int **)malloc((2 * n - 1) * sizeof(int *));
  15. for (i = 0; i < 2 * n - 1; ++i) {
  16. R[i] = (int *)malloc(n * sizeof(int));
  17. }
  18.  
  19. #pragma omp parralel for private(i,j)
  20. for (i = 0; i <= n - 1; i++)
  21. {
  22. for (j = 0; j <= n - 1; j++)
  23. {
  24. if (A[i] < A[j])
  25. {
  26. R[i + n - 1][j] = 1;
  27. }
  28. else
  29. {
  30. R[i + n - 1][j] = 0;
  31. }
  32. }
  33. }
  34.  
  35. #pragma omp parallel for
  36. for (j = 0; j <= n - 1; j++) {
  37. for (k = m; k > 0; k--) {
  38. for (i = (1 << k)-1; i < (1 << (k + 1)) - 1; i = i + 2) {
  39. R[i/2][j] = R[i][j] + R[i + 1][j];
  40. }
  41. }
  42. }
  43.  
  44. for (j = 0; j <= n - 1; j++)
  45. {
  46. P[j] = R[0][j];
  47. }
  48. #pragma omp parallel for
  49. for (j = 0; j <= n - 1; j++)
  50. {
  51. if (j < P[j])
  52. {
  53. if (A[P[j]] != A[j])
  54. {
  55. int x = A[P[j]];
  56. A[P[j]] = A[j];
  57. A[j] = x;
  58. }
  59. }
  60. }
  61.  
  62.  
  63. for (i = 0; i < n; i++)
  64. printf("%d ", A[i]);
  65. printf("\n");
  66.  
  67. for (i = 0; i < 2 * n - 1; i++) {
  68. for (j = 0; j < n; j++)
  69. {
  70. printf("%d ", R[i][j]);
  71. }
  72. printf("\n");
  73. }
  74. return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement