Pagini recente » Cod sursa (job #2677272) | Cod sursa (job #2311010) | Cod sursa (job #2936358) | Cod sursa (job #2292194) | Cod sursa (job #443114)
Cod sursa(job #443114)
#include <iostream>
#include <stdio.h>
using namespace std;
void read (long &n, long v[])
{
freopen("algsort.in", "r", stdin);
scanf("%ld", &n);
for (int i=1; i<=n; ++i)
scanf("%ld", v+i);
}
void write (long n, long v[])
{
freopen("algsort.out", "w", stdout);
//printf("%ld\n", n);
for (int i=1; i<=n; ++i)
printf("%ld\n", *(v+i));
}
void fix_heap(long list[], long root, long key, long bound)
{
long vacant=root;
while (2*vacant <= bound)
{
long larger_child=2*vacant;
if(larger_child < bound && list[larger_child+1] > list[larger_child])
larger_child++;
if(key > list[larger_child])
break;
else
list[vacant] = list[larger_child];
vacant = larger_child;
}
list[vacant] = key;
}
void heap_sort(long n, long v[])
{
long max;
for (int i=n/2; i>0; --i)
fix_heap(v, i, v[i], n);
for (int i=n; i>1; --i)
{
max = v[1];
fix_heap(v, 1, v[i], i-1);
v[i]=max;
}
}
int main()
{
long v[500001], n;
read(n, v);
heap_sort(n, v);
write(n, v);
return 0;
}