Cod sursa(job #1234374)

Utilizator cristigrigoreGrigore Cristan Andrei cristigrigore Data 27 septembrie 2014 11:50:36
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>

using namespace std;
int a[500000],i,j,m,n,z;
void schimba(int x, int y)
{
    int aux;
    aux=a[x];
    a[x]=a[y];
    a[y]=aux;
}
void HeapDwn(int i,int n)
{
    int st,dr;
    if(2*i>n) return;
    st=a[2*i];
    if(2*i+1>n) dr=st-1;
    else dr=a[2*i+1];
    if(st>dr && a[2*i]>a[i])
    {
        schimba(2*i,i);
        HeapDwn(2*i,n);
    }else if(st<dr && a[2*i+1]>a[i])
    {
        schimba(2*i+1,i);
        HeapDwn(2*i+1,n);
    }
}
void HeapUp(int x)
{
    int k;
    k=x/2;
    if(x<=1) return;
    if(a[k]<a[x])
    {
        schimba(x,k);
        HeapUp(k);
    }

}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);z=n;
    for(i=1; i<=n; i++)
    scanf("%d",&a[i]);
    for(i=2; i<=n; i++)
    HeapUp(i);
    while(z>1)
    {
        schimba(1,z);
        z--;
        HeapDwn(1,z);
    }
    for(i=1; i<=n; i++)
    printf("%d ",a[i]);
    printf("\n");

    return 0;
}