Cod sursa(job #1254602)

Utilizator LycrsTrifan Tamara Lycrs Data 2 noiembrie 2014 23:15:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
const int MAX=500005;

int  i, h[MAX], n, k, a[MAX], m;

void upheap()
{

    while (k>1 && h[k]<h[k/2])
    {
        swap(h[k], h[k/2]);
        k/=2;
    }

}

void downheap()
{
    int nod;
    do
    {
        nod=0;
        if (k*2<=n) nod=k*2;
        if (k*2+1<=n && h[2*k+1]<h[2*k])
        nod=k*2+1;
        if (h[nod]>=h[k]) nod=0;

    if (nod)
    {
        swap(h[k], h[nod]);
        k=nod;
    }
} while (nod);
}


void cut() {
    h[k] = h[n];
    --n;

    if ((k > 1) && (h[k] < h[k/2])) {
        upheap();
    } else {
        downheap();
    }
}

int main()
{
    cin>>n; m=n;

    for (i=1; i<=n; ++i)
    {
        cin>>h[i]; k=i; upheap();
    }

    for (i=1; i<=m; ++i)
    {
        k=1;
        a[i]=h[1];
        cut();
    }

    for (i=1; i<=m; ++i) cout<<a[i]<<' ';


    return 0;
}