Pagini recente » Cod sursa (job #1369222) | Cod sursa (job #620663) | Cod sursa (job #2233685) | Cod sursa (job #2194563) | Cod sursa (job #608327)
Cod sursa(job #608327)
#include <cstdio>
#include<deque>
using namespace std;
int n,i,j,k,A[1<<19],B[1<<19],*a,*b,*c,LO,MI,HI,lo,mi,hi;
int main()
{
freopen("algosort.in","r",stdin);
freopen("algosort.out","w",stdout);
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&A[i]);
a=A,b=B;
for(HI=2,MI=1;MI<n;HI<<=1,MI<<=1)
{
for(lo=0,mi=MI,hi=HI;lo<n;lo+=HI,mi+=HI,hi+=HI)
{
if(mi>n)
{
for(i=lo;i<n;i++)b[i]=a[i];
break;
}
if(hi>=n)hi=n;
for(k=lo,i=lo,j=mi;i<mi&&j<hi;)
{
if(a[i]<a[j]){b[k++]=a[i++];continue;}
if(a[i]>a[j]){b[k++]=a[j++];continue;}
b[k++]=a[i++];b[k++]=a[j++];
}
for(;i<mi;)b[k++]=a[i++];
for(;j<hi;)b[k++]=a[j++];
}
c=a;a=b;b=c;
}
for(i=0;i<n;i++)printf("%d ",a[i]);
return 0;
}