Pagini recente » Cod sursa (job #977511) | Cod sursa (job #181061) | Cod sursa (job #2126828) | Cod sursa (job #1204756) | Cod sursa (job #1109185)
#include <stdio.h>
#include <vector>
using namespace std;
int n , i , vect[500005] ;
void max_heapify ( int n , int i )
{
int left , right , largest = 0 ;
left = 2*i ; right = 2*i + 1 ;
if ( left <= n && vect[left] > vect[i] ) { largest = left ; } else { largest = i ; }
if ( right <= n && vect[right] > vect[largest] ) { largest = right ; }
if ( largest != i ) { swap ( vect[i] , vect[largest] ) ; max_heapify ( n , largest ) ; }
}
void build_heap ( int n )
{
for ( int i = n/2 ; i > 0 ; -- i )
{
max_heapify ( n , i ) ;
}
}
void heapsort ( int n )
{
build_heap ( n ) ;
for ( int i = n ; i >= 2 ; -- i )
{
swap ( vect[1] , vect[i] ) ;
max_heapify ( i - 1 , 1 ) ;
}
}
int main()
{
freopen ( "algsort.in" , "r" , stdin ) ;
freopen ( "algsort.out" , "w" , stdout ) ;
scanf ( "%d" , &n ) ;
for ( i = 1 ; i <= n ; ++ i )
{
scanf ( "%d" , &vect[i] ) ;
}
heapsort ( n ) ;
for ( i = 1 ; i <= n ; ++ i )
{
printf ( "%d " , vect[i] ) ;
}
return 0;
}