Advertisement
Guest User

Krecik

a guest
Jun 21st, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. int parent(int i);
  6. int left(int i);
  7. int right(int i);
  8. void kopiec_przywroc(int *A, int n, int i);
  9. void kopiec_buduj(int *A, int n);
  10. void kopiec_sortuj(int *A, int n);
  11.  
  12. main()
  13. {
  14. char z;
  15. int l=0;
  16. int t=0;
  17. int j=0;
  18. int *A=NULL;
  19. int n=0;
  20.  
  21.  
  22. while(1)
  23. {
  24. printf("\n***PROGRAM KRECIK***\n\n Co chcesz zrobic?\n\n p - przywroc kopiec \n b - buduj kopiec \n u - usun max \n q - wyjscie z programu \n");
  25. z = getchar();
  26. fflush(stdin);
  27. switch(z)
  28. {
  29. case'q' :
  30. return 0;
  31. break;
  32. case 'p':
  33. for(j = 0; j<t; j++)
  34. {
  35. printf("%d ", A[j]);
  36. }
  37. printf("\n");
  38. break;
  39. case'b':
  40. printf("\nPodaj rozmiar tablicy");
  41. scanf("%d",&t);
  42. A=(int*)realloc(A,t*sizeof(int));
  43. for(j=0; j<t; j++)
  44. {
  45. printf("A[%d]: ",j);
  46. fflush(stdin);
  47. scanf("%d", &l);
  48. A[j]= l;
  49. }
  50. kopiec_buduj(A, t);
  51. for(j = 0; j<t; j++)
  52. {
  53. printf("%d ", A[j]);
  54. }
  55. printf("\n");
  56.  
  57. }
  58. }
  59.  
  60. }
  61. int parent (int i)
  62. {
  63. return (i-1)/2;
  64. }
  65. int left(int i)
  66. {
  67. return 2*i+1;
  68. }
  69. int right(int i)
  70. {
  71. return 2*i+2;
  72. }
  73.  
  74. void kopiec_przywroc(int *A, int n, int i)
  75. {
  76. int l = left(i);
  77. int r = right(i);
  78. int max=0;
  79. int x=0;
  80.  
  81. if (l<n && *(A+l)>*(A+i))
  82. max=l;
  83. else
  84. max=i;
  85. if (r<n && *(A+r)>*(A+max))
  86. max=r;
  87. if(i!=max)
  88. {
  89. x=*(A+i);
  90. *(A+i)=*(A+max);
  91. *(A+max)=x;
  92. kopiec_przywroc(A,n,max);
  93.  
  94. }
  95. }
  96. void kopiec_buduj(int *A, int n)
  97. {
  98. int i;
  99.  
  100. for(i = n/2; i>=0; i--)
  101. {
  102. kopiec_przywroc(A,n,i);
  103. }
  104. }
  105.  
  106. void kopiec_sortuj(int *A, int n)
  107. {
  108.  
  109.  
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement