Pagini recente » Solutii preONI 2007, Runda 3 | Cod sursa (job #2257774) | Cod sursa (job #1050565) | Cod sursa (job #371419) | Cod sursa (job #608311)
Cod sursa(job #608311)
#include <cstdio>
struct nod{int inf;nod *urm;};
nod **P,*PR,*UL,*PA,*PB;
int A,B,C,X,Y,M;
int main()
{
freopen("algosort.in","r",stdin);
freopen("algosort.out","w",stdout);
scanf("%d",&C);M=C+1;
P=new nod* [M];
for(A=1;A<=C;A++)
{
scanf("%d",&B);
P[A]=new nod;P[A]->inf=B;P[A]->urm=0;
}
A=1;B=2;
for(;A-C;)
{
X=P[A]->inf<=P[B]->inf?A:B;
Y=A+B-X;
PR=UL=P[X];PA=PR->urm;UL->urm=0;PB=P[Y];
P[A]=P[B]=0;
A=A+2<=M?A+2:A+2-M;
B=B+2<=M?B+2:B+2-M;
C=C+1<=M?C+1:C+1-M;
for(;PA&&PB;)
{
if(PA->inf<=PB->inf)
{
UL->urm=PA;UL=PA;PA=PA->urm;UL->urm=0;
continue;
}
UL->urm=PB;UL=PB;PB=PB->urm;UL->urm=0;
}
if(PA)UL->urm=PA;else UL->urm=PB;
P[C]=PR;
}
for(PR=P[C];PR;PR=PR->urm)printf("%d ",PR->inf);
return 0;
}