用吹版的方法简化了下,但只能显示1-9的排序。
#include <stdio.h>
#include <string.h>
void insert(char *a,int frompos,int len,int topos)
{
char temp[10],temp1[10];
int i=frompos+len-1-topos;
strncpy(temp,a+frompos-1,len);
strncpy(temp1,a+topos-1,frompos-topos);
strncpy(a+topos-1,temp,len);
strncpy(a+topos-1+len,temp1,frompos-topos);
}
main()
{
int m,k,i,max,j=1,n;
scanf("%d",&n);
char a[10];
max=n;
for(i=0;i<n;i++)
{
a[i]=i+'1';
}
a[i]='\0';
i=k=n/2;
m=(n-1)/2;
printf("%s\n",a);
insert(a,n+1-k,k,2);
printf("%s\n",a);
while(m--)
{
insert(a,i+1,2,j);
j++;
i++;
printf("%s\n",a);
}
if(n%2==0)
{insert(a,n,1,k);
printf("%s\n",a);}
return 0;
}
#include <stdio.h>
#include <string.h>
void insert(char *a,int frompos,int len,int topos)
{
char temp[10],temp1[10];
int i=frompos+len-1-topos;
strncpy(temp,a+frompos-1,len);
strncpy(temp1,a+topos-1,frompos-topos);
strncpy(a+topos-1,temp,len);
strncpy(a+topos-1+len,temp1,frompos-topos);
}
main()
{
int m,k,i,max,j=1,n;
scanf("%d",&n);
char a[10];
max=n;
for(i=0;i<n;i++)
{
a[i]=i+'1';
}
a[i]='\0';
i=k=n/2;
m=(n-1)/2;
printf("%s\n",a);
insert(a,n+1-k,k,2);
printf("%s\n",a);
while(m--)
{
insert(a,i+1,2,j);
j++;
i++;
printf("%s\n",a);
}
if(n%2==0)
{insert(a,n,1,k);
printf("%s\n",a);}
return 0;
}