Cod sursa(job #386248)

Utilizator lorandCsorba Lorand-Alexandru lorand Data 24 ianuarie 2010 14:13:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
using namespace std;
#include<fstream>
int *h;
void promoveaza(int);
void cerne(int,int);
int main()
{
    int aux,n,i,j;
    ifstream fin("algsort.in");
    fin>>n;
    h=new int[n+1];
    for(i=1;i<=n;++i)
    {
                     fin>>h[i];
                     promoveaza(i);
    }
    for(i=n;i>1;--i)
    {
                    aux=h[1];
                    h[1]=h[i];
                    h[i]=aux;
                    cerne(1,i-1);
    }
    ofstream fout("algsort.out");
    for(i=n;i;--i)
       fout<<h[i]<<' ';
    return 0;
}
void promoveaza(int k)
{
     int eh=0,aux;
     while(k/2 && eh==0)
     {
               if(h[k/2]<=h[k])
                 eh=1;
               else
               {
                   aux=h[k];
                   h[k]=h[k/2];
                   h[k/2]=aux;
                   k/=2;
               }
     }
}
void cerne(int k,int n)
{
     int eh=0,i,aux;
     while(2*k<=n && eh==0)
     {
                  i=2*k;
                  if(i+1<=n)
                    if(h[i+1]<h[i])
                      ++i;
                  if(h[k]<=h[i])
                    eh=1;
                  else
                  {
                      aux=h[i];
                      h[i]=h[k];
                      h[k]=aux;
                      k=i;
                  }
     }
}