Cod sursa(job #1234372)

Utilizator cristigrigoreGrigore Cristan Andrei cristigrigore Data 27 septembrie 2014 11:46:28
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 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)
    {
        schimba(2*i,i);
        HeapDwn(2*i,n);
    }
    else
    {
        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;
}