Cod sursa(job #1234377)

Utilizator cristigrigoreGrigore Cristan Andrei cristigrigore Data 27 septembrie 2014 11:53:38
Problema Sortare prin comparare Scor 100
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 HeapDw(int r, int k)
{
   int St,Dr,i;
   if(2*r<=k)
   {
       St=a[2*r];
       if(2*r+1<=k) Dr=a[2*r+1];
       else Dr=St-1;
       if(St>Dr) i=2*r;
       else i=2*r+1;
       if(a[r]<a[i])
       {
           schimba(r,i);
           HeapDw(i,k);
       }
   }

}
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--;
        HeapDw(1,z);
    }
    for(i=1; i<=n; i++)
    printf("%d ",a[i]);
    printf("\n");

    return 0;
}