Cod sursa(job #662679)

Utilizator I.AlexandruIlie Alexandru I.Alexandru Data 16 ianuarie 2012 21:51:49
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<stdio.h>
#define maxn 500005
using namespace std;

long n, v[maxn], i;

void swap(long &a, long &b)
{long aux=a;
a=b;
b=aux;
}

void siftdown(long v[], long start, long end)
{long child, root=start;
              
while(2*root+1<=end)
    {child=2*root+1;
     if(child<end && v[child]<v[child+1])
       child++;
     
     if(v[root]<v[child])
       {swap(v[root], v[child]);
        root=child;
       } 
     else return;
    }
}

void heapify(long v[], long n)
{for(long i=n/2-1; i>=0; i--)
    siftdown(v, i, n-1);
}

void heapsort(long v[], long n) 
{long end;
heapify(v, n);
end=n-1;

while(end>0) 
     {swap(v[0], v[end]);
      siftdown(v, 0, --end);
     }
}
       
int main()
{freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);

for(i=0; i<n; i++)
   scanf("%d", &v[i]);
	
heapsort(v, n);

for(i=0; i<n; i++)
   printf("%d ", v[i]);

return 0;
}