Pagini recente » Cod sursa (job #3246828) | Cod sursa (job #2973000) | Cod sursa (job #1453069) | Cod sursa (job #2274096) | Cod sursa (job #255464)
Cod sursa(job #255464)
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 512000
int H[MAX];
int i, N, hl, x;
inline void swap( int x, int y ) { int r=H[x]; H[x]=H[y]; H[y]=r; }
void hup( int p ) {
if ( p==0 ) return;
int t = (p-1) >> 1;
if ( H[t] > H[p] ) {
swap(t, p);
hup(t);
}
}
void hdown( int p ) {
if ( 2*p+1 > hl ) return;
if ( 2*p+2 <= hl ) {
x = (H[2*p+1]<H[2*p+2]) ? 2*p+1 : 2*p+2;
if ( H[p]>H[x] ) {
swap(p,x);
hdown(x);
}
} else {
if ( H[2*p+1] < H[p] ) {
swap(p, 2*p+1);
hdown(2*p+1);
}
}
}
int main() {
ifstream in("algsort.in");
ofstream out("algsort.out");
in >> N;
for ( i=0; i<N; ++i ) {
in >> x;
H[i] = x;
hup(i);
}
hl = N-1;
for ( i=0; i<N; ++i ) {
out << H[0] << " ";
H[0] = H[hl];
hdown(0);
-- hl;
}
out << "\n";
return 0;
}