Cod sursa(job #640999)

Utilizator yamahaFMI Maria Stoica yamaha Data 26 noiembrie 2011 22:36:13
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>

using namespace std;

int n,v[500005];

int valmin(int,int);
void combinare(int,int);
void minheap(void);
void heapsort(void);
void tipar(void);

int main (void)
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&v[i]);
    heapsort();
    tipar();
        
    return 0;
}

int valmin(int i, int 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;
}

void combinare(int i, int n)
{
    int ind, man;
    if(i<=n/2)
    {
       ind = valmin(i,n);
       if(v[i]>v[ind])
       {
            man=v[i];
            v[i]=v[ind];
            v[ind]=man;
            combinare(ind,n);
       }
    }    
}

void minheap()
{
     for(int i=n/2;i>=1;i--) combinare(i,n);
}

void heapsort()
{
     int man;
     minheap();
     for(int i=n;i>=1;i--)
     {
         man=v[i];
         v[i]=v[1];
         v[1]=man;
         combinare(1,i-1);
     }
}

void tipar()
{
     for(int i=n;i>=1;i--) printf("%d ",v[i]);
}