//`字典序法生成排列`
#include<stdio.h>
void Change(int list[],int a,int b)
{
int temp=0;
temp=list[a];
list[a]=list[b];
list[b]=temp;
return;
}
void Sort(int list[],int a,int n)
{
int temp=0;
for(int i=1;i<n-a;++i)
for(int j=a+1;j<n-1;++j)
if(list[j]>list[j+1])
{
temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
}
return;
}
void Arrange(int list[],int n)
{
int num=1,a=0,b=0;
for (int i=n;i>0;i--)
num=num*i;
while (num--)
{
for(int i=0;i<n;i++)
printf("%d ",list[i]);
printf("\n");
for(int i=n-1;i>0;i--)
if(list[i-1]<list[i])
{
a=i-1;
break;
}
for(int j=n-1;j>a;j--)
if (list[j]>list[a])
{
b=j;
break;
}
Change(list,a,b);
Sort(list,a,n);
}
return;
}
int main()
{
int n,i;
int list[99];
printf("输入排列的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
list[i]=i+1;
}
Arrange(list,n);
return 0;
}
C语言编写字典序法生成排列
最新推荐文章于 2023-06-05 15:15:26 发布