Pagini recente » Cod sursa (job #252350) | Cod sursa (job #2472741) | Cod sursa (job #1648827) | Cod sursa (job #3213449) | Cod sursa (job #2219779)
#include <algorithm>
#include <vector>
#include <cstdio>
using namespace std;
void swap(long long a[],long long i,long long j)
{
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
void downheap(long long a[],long long v,long long n)
{
int w = 2 * v + 1; // primul descendent al lui v
while (w<n)
{
if (w+1<n) // mai exista unul?
if (a[w+1]>a[w]) w++; //crescator
// w este decendentul lui v
if (a[v]>=a[w]) return; //crescator
swap(a,v, w); // interschimbam v cu w
v = w; // continuam
w = 2 * v + 1;
}
}
void heapsort(long long a[],long long n)
{
for (long long v = n/2-1; v >= 0; v--) //creem heap`ul
downheap (a,v,n);
while (n>1)
{
n--;
swap(a,0, n);
downheap (a,0,n);
}
}
int main()
{
long long i, x, n,v[500000];
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i = 0; i < n; i++ )
{
scanf("%d",&x);
v[i]=x;
}
heapsort(v,n);
for(i = 0; i < n; i++)
{
printf("%d ",v[i]);
}
return 0;
}