Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- int left(int i)
- {
- return 2*i+1;
- }
- int right(int i)
- {
- return 2*i+2;
- }
- int parent(int i)
- {
- return (i-1)/2;
- }
- void kopiec_przywroc(int *A,int i,int length)
- {
- int max,tmp;
- int l=left(i);
- int r=right(i);
- if(l<length && A[l]>A[i])
- {
- max=l;
- }
- else{
- max=i;
- }
- if(r<length &&A[r]>A[max])
- {
- max=r;
- }
- if(max!=i){
- tmp=A[i];
- A[i]=A[max];
- A[max]=tmp;
- kopiec_przywroc(A,max,length);
- }
- }
- void kopiec_buduj(int *A,int length)
- {
- int i;
- for(i=length/2;i>=0;i--)
- {
- kopiec_przywroc(A,i,length);
- }
- }
- int kopiec_usun_max(int *A,int *heap_size)
- {
- int max;
- if(*heap_size<1)
- {
- return -1;
- }
- max=A[0];
- A[0]=A[*heap_size-1];
- (*heap_size)--;
- kopiec_przywroc(A,0,*heap_size);
- return max;
- }
- int main()
- {
- int rozmiar,i;
- int *A=NULL;
- printf("Podaj rozmiar tablicy: ");
- fflush(stdin);
- scanf("%d",&rozmiar);
- A=(int *) malloc(rozmiar*sizeof(int));
- for(i=0;i<rozmiar;i++)
- {
- printf("\nTablica[%i]=",i);
- fflush(stdin);
- scanf("%d",&A[i]);
- }
- kopiec_buduj(A,rozmiar);
- for(i=0;i<rozmiar;i++)
- {
- printf("%d ",A[i]);
- }
- printf("\n");
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement