Pagini recente » Cod sursa (job #700843) | Clasament simulare_de_oni_9 | Cod sursa (job #2746340) | Cod sursa (job #687869) | Cod sursa (job #374341)
Cod sursa(job #374341)
/*
Shell Sort using Sedgewick's increments
9*4^i- 9*2^i + 1, 4^i - 3*2^i +1
O(N^(4/3))
*/
#include <cstdio>
const int NMAX=500005;
int N,x[NMAX],inc[32];
int main()
{
int i,j,k,a,b,na,nb;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for (i=1;i<=N;++i) scanf("%d",&x[i]);
na=0;nb=2;
while (1)
{
a=1<<na;
a*=9*(a-1);
a++;
if (3*a <= N) inc[++inc[0]]=a;
else break;
b=1<<nb;
b*=b-3;
b++;
if (3*b <= N) inc[++inc[0]]=b;
else break;
++na;++nb;
}
for (i=inc[0];i;i--)
{
for (j=inc[i]+1;j<=N;++j)
{
a=x[j];k=j-inc[i];
while (k>0 && x[k] > a)
{
x[k+inc[i]]=x[k];
k-=inc[i];
}
x[k+inc[i]]=a;
}
}
for (i=1;i<=N;++i) printf("%d ",x[i]);
return 0;
}