Pagini recente » Cod sursa (job #2540549) | Cod sursa (job #2991035) | Cod sursa (job #1828853) | Cod sursa (job #110854) | Cod sursa (job #784043)
Cod sursa(job #784043)
#include<stdio.h>
#include<algorithm>
#define MAX 500001
using namespace std;
int n , H[MAX] , q;
void citire();
void heapsort();
void rebuild(int i);
void build();
void tipar();
int main()
{
citire();
heapsort();
tipar();
return 0;
}
void citire()
{
freopen("algsort.in" , "r" , stdin );
scanf("%d" , &n );
for( int i = 1 ; i<= n ; ++i )
scanf("%d" , &H[i]);
}
void heapsort()
{
q=n;
build();
for( int i = n ; i >= 2 ; --i )
{
swap(H[i],H[1]);
q--;
rebuild(1);
}
}
void build()
{
for(int i = n/2 ; i ; --i )
rebuild(i);
}
void rebuild(int i)
{
int max;
max = i;
if(H[2*i] > H[max] && 2*i <= q)
max = 2*i;
if(H[2*i+1] > H[max] && 2*i+1 <= q)
max = 2*i+1;
if(max != i)
{
std::swap(H[max],H[i]);
rebuild(max);
}
}
void tipar()
{
freopen("algsort.out" , "w" , stdout );
for( int i = 1 ; i<= n ; ++i )
printf("%d " , H[i] );
}