Cod sursa(job #294496)

Utilizator codrinCodrin LACHE codrin Data 2 aprilie 2009 16:16:38
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>

using namespace std;

#define nmax 500000

long long a[nmax+1],n;

void pulea_sort(long long n)
{
   long long i,j,aux;
   for(i=1;i<n;i++)
     for(j=i+1;j<=n;j++)
        if(a[i]>a[j])
            {
                aux=a[i];a[i]=a[j];a[j]=aux;
            }
}

void heaps(long long n)
{
    long long i,fiu,nodc,aux;
    //faza1: facerea heap-ului
    for(i=2;i<=n;i++)
    {
        nodc=i;
        while(nodc/2 && a[nodc]>a[nodc/2])
             {aux=a[nodc];a[nodc]=a[nodc/2];a[nodc/2]=aux;
              nodc/=2;
             }
    }
    //faza2: shtergerile repetate ale radacinii
    for(i=n;i>=2;i--)
    {
        aux=a[i];a[i]=a[1];a[1]=aux;
        nodc=1;
        while(1)
        {
            fiu=2*nodc;
            if(fiu>=i)break;
            if(fiu+1<i && a[fiu+1]>a[fiu]) fiu++;//deci dupa asta
            //fiu=indicele fiului de valoare maxima, evid. dak exista ambii fii
            if(a[nodc]>=a[fiu])break;
            aux=a[nodc];a[nodc]=a[fiu];a[fiu]=aux;
            nodc=fiu;
        }
    }
}


int main()
{
    ifstream fin("algsort.in");
    n=0;
    while(!fin.eof())
    {
        fin>>a[++n];fin.get();
    }
    pulea_sort(n);
    long long i;
    ofstream fout("algsort.out");
    for(i=1;i<=n;i++)
       fout<<a[i]<<" ";
    fout.close();
    return 0;
}