Cod sursa(job #1043262)

Utilizator Emanuel9Dumitru Emanuel Cristian Emanuel9 Data 28 noiembrie 2013 10:49:06
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <stdio.h>
using namespace std;

int a[500001],n;
void interschimba(int &x,int &y){
    int aux;
    aux=x;
    x=y;
    y=aux;
}

void Batog(int a[],int n)
{
      int i,ok=1,pozitie=0;
      i=1;
      while(ok==1){
            if(2*i<=n && 2*i+1<=n)
               {
                   if(a[2*i]<a[2*i+1])
                     pozitie=2*i;
                     else
                     pozitie=2*i+1;
                   if(a[i]<a[pozitie])
                     pozitie=0;
               }
               else
            if(2*i<=n && a[2*i]<a[i])
              pozitie=2*i;
               else
            if(2*i+1<=n && a[2*i+1]<a[i])
               pozitie=2*i+1;
            if(pozitie==0)
               ok=0;
               else
               {
                   interschimba(a[i],a[pozitie]);
                   i=pozitie;
                   pozitie=0;
               }
        }
  }


int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    int i,pozitie,x;
    scanf("%d%d",&n,&a[1]);

    for(i=2;i<=n;i++)
    {
          scanf("%d",&a[i]);
          x=i;pozitie=i/2;
          while(pozitie>=1)
          {
                if(a[x]<a[pozitie])
                    interschimba(a[x],a[pozitie]);
                x=pozitie;
                pozitie=pozitie/2;

          }
    }
    while(n>1){
          printf("%d ",a[1]);
          a[1]=a[n];
          n--;
          if(n>1)
            Batog(a,n);
    }
    printf("%d",a[1]);
    return 0;
}