Pagini recente » Cod sursa (job #1312761) | Cod sursa (job #224941) | Cod sursa (job #2364404) | Cod sursa (job #1563832) | Cod sursa (job #269445)
Cod sursa(job #269445)
#include <stdio.h>
long a[1000000],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]&&2*k<n-i+1){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]&&2*k+1<n-i+1){x=a[k];a[k]=a[2*k+1];a[2*k+1]=x;k=2*k+1;z=1;}
if(a[2*k]==-1&&a[2*k+1]==-1)z=0;
}
while(z);
}
fclose(stdout);fclose(stdin);
return 0;
}