Cod sursa(job #1053833)

Utilizator ionut.picpopa ionut cristian ionut.pic Data 12 decembrie 2013 23:13:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
using namespace std;
long long v[500001],n,i;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
long long indvalmin(long long i,long long n)
{
    if(2*i+1<=n)
        if(v[2*i]<=v[2*i+1])
            return 2*i;
        else
            return 2*i+1;
    else
        return 2*i;
}
long long combinare(long long i,long long n)
{
    long long ind,aux;
    if(i<=n/2)
    {
        ind=indvalmin(i,n);
        if(v[i]>v[ind])
        {
            aux=v[i];
            v[i]=v[ind];
            v[ind]=aux;
            combinare(ind,n);
        }
    }
}
void minheap()
{
    for(i=n/2;i>=1;i--)
        combinare(i,n);
}
void heapsort()
{
    long long aux;
    minheap();
    for(i=n;i>=1;i--)
    {
        aux=v[i];
        v[i]=v[1];
        v[1]=aux;
        combinare(1,i-1);
    }
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    heapsort();
    for(i=n;i>=1;i--)
        fout<<v[i]<<" ";
    fin.close();
    fout.close();
    return 0;
}