Pagini recente » Cod sursa (job #1846091) | Cod sursa (job #8465) | Cod sursa (job #2700560) | Istoria paginii utilizator/emmaiulia | Cod sursa (job #241628)
Cod sursa(job #241628)
# include <cstdio>
# define FIN "algsort.in"
# define FOUT "algsort.out"
# define MAXN 500005
int N;
int H[MAXN];
void swap(int &a, int &b)
{
int aux = a;
a = b;
b = aux;
}
void down(int i, int N)
{
int fiu = i << 1, tata = i;
while (fiu <= N)
{
if (fiu < N && H[fiu] > H[fiu+1]) fiu++;
if (H[tata] > H[fiu])
{
swap(H[tata], H[fiu]);
tata = fiu;
fiu <<= 1;
} else fiu = N + 1;
}
}
void heapsort(int N)
{
int i;
for (i = N >> 1; i >= 1; --i)
down(i, N);
for (i = N; i >= 1; --i)
{
printf("%d ",H[1]);
H[1] = H[i];
down(1, i);
}
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d",&N);
for (int i = 1; i <= N; ++i)
scanf("%d",&H[i]);
heapsort(N);
return 0;
}