Pagini recente » Cod sursa (job #2310547) | Cod sursa (job #1835362) | Cod sursa (job #935476) | Cod sursa (job #3160362) | Cod sursa (job #240380)
Cod sursa(job #240380)
#include <cstdio>
#define MAX_N 500005
int V[MAX_N], H[MAX_N];
int N;
void swap(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
void citire()
{
scanf("%d",&N);
for(int i = 1; i <= N; ++i)
scanf("%d",V+i);
for(int i = 1; i <= N; ++i)
{
int j = i;
H[i] = V[i];
while(j/2 && H[j] > H[j/2])
{
swap(H[j], H[j/2]);
j /= 2;
}
}
}
void solve()
{
int Nh = N;
while(Nh)
{
swap(H[1], H[Nh]);
V[Nh] = H[Nh];
Nh--;
int i = 1;
while(1)
{
int j = 2 * i;
if(j > Nh) break;
if(j+1 <= Nh && H[j] < H[j+1]) ++j;
if(H[i] > H[j]) break;
swap(H[i], H[j]);
i = j;
}
}
for(int i = 1; i <= N; ++i)
printf("%d ", V[i]);
}
int main()
{
freopen("algsort.in","rt",stdin);
freopen("algsort.out","wt",stdout);
citire();
solve();
}