#include <stdio.h>
int a[] = {10,9,8,7,6,5,4,3,2,1};
int len = sizeof(a)/sizeof(int);
void print(int a[]);
void shell(int a[]);
int main()
{
shell(a);
//print(a);
return 0;
}
void print(int a[])
{
int i;
for(i = 0;i < len;i++)
{
printf("%3d",a[i]);
}
printf("\n");
}
void shell(int a[])
{
int b[] = {1,3,5};
int k=2;
int step = b[k];
int i,j;
int temp;
while(k >= 0)
{
for(i = step;i < len;i++)
{
temp = a[i];
if(a[i-step] > a[i])
{
for(j = i - step;j >= 0;j -= step)
{
if(a[j] > temp)
{
a[j + step] = a[j];
}
else
{
break;
}
}
a[j + step] = temp;
}
}
step = b[--k];
print(a);
}
}
int a[] = {10,9,8,7,6,5,4,3,2,1};
int len = sizeof(a)/sizeof(int);
void print(int a[]);
void shell(int a[]);
int main()
{
shell(a);
//print(a);
return 0;
}
void print(int a[])
{
int i;
for(i = 0;i < len;i++)
{
printf("%3d",a[i]);
}
printf("\n");
}
void shell(int a[])
{
int b[] = {1,3,5};
int k=2;
int step = b[k];
int i,j;
int temp;
while(k >= 0)
{
for(i = step;i < len;i++)
{
temp = a[i];
if(a[i-step] > a[i])
{
for(j = i - step;j >= 0;j -= step)
{
if(a[j] > temp)
{
a[j + step] = a[j];
}
else
{
break;
}
}
a[j + step] = temp;
}
}
step = b[--k];
print(a);
}
}