Cod sursa(job #1283351)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 5 decembrie 2014 16:23:18
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
//Deresu Roberto - FMI
//Re :)
#include<fstream>
#define nx 500007
using namespace std;
int n,v[nx];

ifstream fin("algsort.in");
ofstream fout("algsort.out");

void add(int node)
{
    if(node < 2) return;

    if(v[node] > v[node/2])
    {
        swap(v[node],v[node/2]);
        add(node/2);
    }
}

void update(int node, int m)
{
    int next_node = 0;

    if(v[node] < v[2*node] && v[node] < v[2*node+1])
    {
        if(v[2*node] < v[2*node+1] && 2*node+1 < m)
            next_node = 2*node+1;
        else
            if(2*node < m)
                next_node = 2*node;
    }
    else
        if(v[node] < v[2*node] && 2*node < m)
            next_node = 2*node;
        else
            if(v[node] < v[2*node+1] && 2*node+1 < m)
                next_node = 2*node+1;

    if(next_node)
    {
        swap(v[node],v[next_node]);
        update(next_node,m);
    }
}

int main()
{
    fin>>n;

    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
        add(i);
    }

    for(int i=1;i<=n;i++)
    {
        swap(v[1],v[n-i+1]);
        update(1,n-i+1);
    }

    for(int i=1;i<=n;i++)
        fout<<v[i]<<" ";

	return 0;
}