fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void ShellSort(int *tab,int n)
  6. {
  7. int i,j,h;
  8. int bufor;
  9. h = 1;
  10. while(h <= n)
  11. {
  12. h *= 3;
  13. h++;
  14. }
  15. while(h > 0)
  16. {
  17. for(i = h;i < n;i++)
  18. {
  19. j = i;
  20. bufor = tab[j];
  21. while(j >= h && tab[j-h] > bufor)
  22. {
  23. tab[j] = tab[j - h];
  24. j -= h;
  25. }
  26. tab[j] = bufor;
  27. }
  28. h/=3;
  29. }
  30. }
  31.  
  32. void heapify(int *A,int l,int r)
  33. {
  34. int i,j;
  35. int x;
  36. int isCorrect;
  37. x = A[l];
  38. i = l;
  39. j = 2 * i + 1;
  40. isCorrect = 0;
  41. while(j <= r && !isCorrect)
  42. {
  43. if(j < r &&A[j] < A[j+1])
  44. j++;
  45. if(x < A[j])
  46. {
  47. A[i] = A[j];
  48. i = j;
  49. j = 2 * i + 1;
  50. }
  51. else
  52. isCorrect = 1;
  53. }
  54. A[i] = x;
  55. }
  56.  
  57. void buildHeap(int *A,int n)
  58. {
  59. int i;
  60. for(i = n/2 - 1;i >= 0;i--)
  61. heapify(A,i,n - 1);
  62. }
  63.  
  64. void heapSort(int *A,int n)
  65. {
  66. int i;
  67. int x;
  68. buildHeap(A,n);
  69. for(i = n - 1; i >= 1;i--)
  70. {
  71. x = A[0];
  72. A[0] = A[i];
  73. A[i] = x;
  74. heapify(A,0,i - 1);
  75. }
  76. }
  77.  
  78. int main(void) {
  79. // your code goes here
  80. int k,m,n;
  81. int *A;
  82. char esc;
  83. do
  84. {
  85. printf("Podaj liczbe elementow tablicy \n");
  86. scanf("%d", &n);
  87. printf("Podaj gorny zakres przedzialu dla elementow tablicy \n");
  88. scanf("%d", &m);
  89. srand(time(NULL));
  90. A = (int*)malloc(n*sizeof(int));
  91. for(k = 0;k < n;k++)
  92. A[k] = rand()%m;
  93. for(k = 0;k < n;k++)
  94. printf("%d ",A[k]);
  95. printf("\n\n");
  96. heapSort(A,n);
  97. for(k = 0;k < n;k++)
  98. printf("%d ",A[k]);
  99. printf("\n\n");
  100. free(A);
  101. printf("Czy chcesz kontynuowac ? \n");
  102. scanf(" %c",&esc);
  103. }
  104. while(esc != 'n');
  105. return 0;
  106. }
  107.  
Success #stdin #stdout 0s 4448KB
stdin
20
1000
t
30
1000
n
stdout
Podaj liczbe elementow tablicy 
Podaj gorny zakres przedzialu dla elementow tablicy 
874 325 497 209 602 712 73 57 458 439 351 992 829 30 553 152 647 890 34 991 

30 34 57 73 152 209 325 351 439 458 497 553 602 647 712 829 874 890 991 992 

Czy chcesz kontynuowac ? 
Podaj liczbe elementow tablicy 
Podaj gorny zakres przedzialu dla elementow tablicy 
874 325 497 209 602 712 73 57 458 439 351 992 829 30 553 152 647 890 34 991 476 812 232 270 478 649 531 895 82 781 

30 34 57 73 82 152 209 232 270 325 351 439 458 476 478 497 531 553 602 647 649 712 781 812 829 874 890 895 991 992 

Czy chcesz kontynuowac ?