Cod sursa(job #1813659)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 23 noiembrie 2016 09:45:03
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>

using namespace std;
int v[500001],h[500001];
void modif (int e){
    int c,p,aux;
    c=e;
    p=e/2;
    while (p>0){
        if (h[c]>h[p]){
            aux=h[c];
            h[c]=h[p];
            h[p]=aux;
        }
        else break;
        c=p;
        p/=2;
    }
}
void mod (int n){
    int p,c,aux;
    p=1;
    c=2*p;
    while (c<=n){
        if (c+1<=n && h[c+1]>h[c])
            c++;
        if (h[p]<h[c]){
            aux=h[p];
            h[p]=h[c];
            h[c]=aux;
        }
        p=c;
        c*=2;
    }
}
int main()
{
    FILE *fin=fopen ("algsort.in","r");
    FILE *fout=fopen ("algsort.out","w");
    int n,i,e,aux;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&v[i]);
    h[1]=v[1];
    e=1;
    for (i=2;i<=n;i++){
        h[++e]=v[i];
        modif (e);
    }
    // acum h e heap
    for (i=n;i>0;i--){
        aux=h[1];
        h[1]=h[i];
        h[i]=aux;
        e--;
        mod (e);
    }
    for (i=1;i<=n;i++)
        fprintf (fout,"%d ",h[i]);
    return 0;
}