Cod sursa(job #1036745)

Utilizator acomAndrei Comaneci acom Data 19 noiembrie 2013 16:37:34
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<cstdio>
using namespace std;
int n,a[500005];
void interschimba(int &A, int &B)
{
    int aux=A;
    A=B, B=aux;
}
void reconstituie_heap(int s, int lung)
{
    int Max=a[s],p=s;
    if (2*s<=lung && Max<a[2*s]) Max=a[2*s], p=2*s;
    if (2*s+1<=lung && Max<a[2*s+1]) Max=a[2*s+1], p=2*s+1;
    interschimba(a[s],a[p]);
    if (p!=s) reconstituie_heap(p,lung);
}
void construieste_heap(int lung)
{
    int i;
    for (i=lung/2;i;--i)
        reconstituie_heap(i,lung);
}
int main()
{
    int i;
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;++i)
        scanf("%d",&a[i]);
    construieste_heap(n);
    for (i=n;i>1;--i)
    {
        interschimba(a[i],a[1]);
        construieste_heap(i-1);
    }
    for (i=1;i<=n;++i)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}