Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int parent(int i);
- int left(int i);
- int right(int i);
- void kopiec_przywroc(int *A, int n, int i);
- void kopiec_buduj(int *A, int n);
- void kopiec_sortuj(int *A, int n);
- main()
- {
- char z;
- int l=0;
- int t=0;
- int j=0;
- int *A=NULL;
- int n=0;
- while(1)
- {
- 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");
- z = getchar();
- fflush(stdin);
- switch(z)
- {
- case'q' :
- return 0;
- break;
- case 'p':
- for(j = 0; j<t; j++)
- {
- printf("%d ", A[j]);
- }
- printf("\n");
- break;
- case'b':
- printf("\nPodaj rozmiar tablicy");
- scanf("%d",&t);
- A=(int*)realloc(A,t*sizeof(int));
- for(j=0; j<t; j++)
- {
- printf("A[%d]: ",j);
- fflush(stdin);
- scanf("%d", &l);
- A[j]= l;
- }
- kopiec_buduj(A, t);
- for(j = 0; j<t; j++)
- {
- printf("%d ", A[j]);
- }
- printf("\n");
- }
- }
- }
- int parent (int i)
- {
- return (i-1)/2;
- }
- int left(int i)
- {
- return 2*i+1;
- }
- int right(int i)
- {
- return 2*i+2;
- }
- void kopiec_przywroc(int *A, int n, int i)
- {
- int l = left(i);
- int r = right(i);
- int max=0;
- int x=0;
- if (l<n && *(A+l)>*(A+i))
- max=l;
- else
- max=i;
- if (r<n && *(A+r)>*(A+max))
- max=r;
- if(i!=max)
- {
- x=*(A+i);
- *(A+i)=*(A+max);
- *(A+max)=x;
- kopiec_przywroc(A,n,max);
- }
- }
- void kopiec_buduj(int *A, int n)
- {
- int i;
- for(i = n/2; i>=0; i--)
- {
- kopiec_przywroc(A,n,i);
- }
- }
- void kopiec_sortuj(int *A, int n)
- {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement