Advertisement
Guest User

kopce

a guest
Jun 25th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4.  
  5.  
  6.  
  7.  
  8.  
  9. int Left(int i);
  10. int Right(int i);
  11. int Parent(int i);
  12.  
  13. void kopiec_wypelnij(int *tab, int roz);
  14. void kopiec_buduj(int *tab,int root);
  15. void kopiec_przywr(int *tab,int i , int n);
  16. main()
  17. {
  18.     int rozmiar;
  19.     int *A;  
  20.     char z;
  21.     fflush(stdin);
  22.     printf("Podaj Rozmiar ");
  23.     scanf("%d",&rozmiar);
  24.     A=malloc(sizeof(int)*rozmiar);
  25.     while(1)
  26.     {
  27.         printf("\nwybierz opcje");
  28.         printf("\nW-wypelnij");
  29.         printf("\nP-Przywroc");
  30.         printf("\nB-buduj\n");
  31.         fflush(stdin);
  32.         z = _getch();
  33.         switch(z)
  34.         {
  35.         case 'w':
  36.             kopiec_wypelnij(A,rozmiar);
  37.             break;
  38.         case 'p':
  39.             break;
  40.         case 'b':
  41.             kopiec_buduj(A,rozmiar);
  42.  
  43.             break;
  44.            
  45.         }
  46.     }
  47. }
  48.  
  49. int Left(int i)
  50. {
  51.     return 2*i+1;
  52. }
  53. int Right(int i)
  54. {
  55.     return 2*(i+1);
  56. }
  57. int Parent(int i)
  58. {
  59.     return (i-1)/2;
  60. }
  61. void kopiec_wypelnij(int *tab, int roz)
  62. {
  63.     int i;
  64.     for(i=0 ;i<roz ;i++)
  65.         {
  66.             printf("podaj wartosc liczbowa dla elelemntu:%d : ",i);
  67.             fflush(stdin);
  68.             scanf("%d",*(tab+i));
  69.         }
  70. }
  71.  
  72. void kopiec_przywr(int *tab,int i , int n)
  73. {
  74.     int l=Left(i);
  75.     int r=Right(i);
  76.     int Najwiekszy,temp;
  77.     if(l<n&&tab[l]>tab[i])
  78.     {
  79.         Najwiekszy=l;
  80.     }
  81.     else
  82.     {
  83.         Najwiekszy=i;
  84.     }
  85.     if(r<n&&tab[r]>tab[Najwiekszy])
  86.     {
  87.         Najwiekszy=r;
  88.     }
  89.     if(Najwiekszy!=1)
  90.     {
  91.         temp=tab[i];
  92.         tab[i]=tab[Najwiekszy];
  93.         tab[Najwiekszy]=temp;
  94.         kopiec_przywr(tab,Najwiekszy,n);
  95.     }
  96. }
  97. void kopiec_buduj(int *tab,int n)
  98. {
  99.    
  100.     int i;
  101.     for(i=n/2;i>=0;i--)
  102.     {
  103.         kopiec_przywr(tab,i,n);
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement