Cod sursa(job #269438)

Utilizator petrecgClinciu Glisca Petre petrecg Data 2 martie 2009 21:57:52
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
long a[100],i,k,z,n,x;

int main()
{freopen("algsort.in","r",stdin);freopen("algsort.out","w",stdout);
 fscanf(stdin,"%ld",&n);
 for(i=1;i<=n;i++)
  {fscanf(stdin,"%ld",&a[i]);
   k=i;while(a[k]<a[k/2]&&k>1){x=a[k];a[k]=a[k/2];a[k/2]=x;k=k/2;}
  }
 for(i=1;i<=n;i++)
  {fprintf(stdout,"%ld ",a[1]);
   a[1]=a[n-i+1];a[n-i+1]=-1;k=1;z=1;
   do
   {z=0;
    if((a[2*k+1]==-1||a[2*k]<=a[2*k+1])&&a[2*k]>-1&&a[k]>a[2*k]){x=a[k];a[k]=a[2*k];a[2*k]=x;k=2*k;z=1;}
     else if(a[2*k]>=a[2*k+1]&&a[2*k+1]>-1&&a[k]>a[2*k+1]){x=a[k];a[k]=a[2*k+1];a[2*k+1]=x;k=2*k;z=1;}
    if(a[2*k]==-1&&a[2*k+1]==-1)z=0;
   }
   while(z);
  }
 fclose(stdout);fclose(stdin);
 return 0;
}