Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <time.h>
  5. double sr = 0, pr = 0;
  6. int pyramid_sort(int *a, int *b)
  7. {
  8. int t = *a;
  9. *a = *b;
  10. *b = t;
  11. return 0;
  12. }
  13. int main()
  14. {
  15. int i, n, j, step, b;
  16. scanf("%d", &n);
  17. int *arr = calloc(n, sizeof(int));
  18. double elapsed;
  19. double time;
  20. /*srand(time(NULL));*/
  21. clock_t start, end;
  22. /*time_t start, end;
  23. start = time(NULL);*/
  24. for (j= 0; j < 1000; j++)
  25. {
  26. step = 0;
  27. b = 0;
  28. for (i = 0; i < n; i++)
  29. {
  30. arr[i] = rand();
  31. }
  32. start = clock();
  33. while (1)
  34. {
  35. b = 0;
  36. for (i = 0; i < n; ++i)
  37. {
  38. if (i * 2 + 2 + step < n)
  39. {
  40. if (arr[i + step] > arr[i * 2 + 1 + step] || arr[i + step] > arr[i * 2 + 2 + step])
  41. {
  42. sr++;
  43. if (arr[i * 2 + 1 + step] < arr[i * 2 + 2 + step])
  44. {
  45. pyramid_sort(&arr[i + step], &arr[i * 2 + 1 + step]);
  46. pr++;
  47. b = 1;
  48. }
  49. else
  50. {
  51. sr++;
  52. if (arr[i * 2 + 2 + step] < arr[i * 2 + 1 + step])
  53. {
  54. pyramid_sort(&arr[i + step], &arr[i * 2 + 2 + step]);
  55. pr++;
  56. b = 1;
  57. }
  58. }
  59. }
  60. }
  61. else if (i * 2 + 1 + step < n)
  62. {
  63. sr++;
  64. if (arr[i + step] > arr[i * 2 + 1 + step])
  65. {
  66. pyramid_sort(&arr[i + step], &arr[i * 2 + 1 + step]);
  67. b = 1;
  68. pr++;
  69. }
  70. }
  71. }
  72. if (!b)
  73. step++;
  74. if (step + 2 == n)
  75. break;
  76. }
  77. end = clock();
  78. elapsed = (double)(end - start) / CLOCKS_PER_SEC;
  79. time += elapsed;
  80. }
  81. /*end = time(NULL);*/
  82. printf("\n");
  83. //printf("time %f sec.\n", difftime(end, start));
  84. printf("time %.7f \n", time);
  85. printf("\n");
  86. printf("%lf ", ((sr+pr) / 1000));
  87. printf("\n");
  88. //printf("%lf ", (pr / 1000));
  89. return 1;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement