C语言实现全排列

时间:2023-03-09 08:41:22
C语言实现全排列

实现全排列,递归实现

 #include <stdio.h>
#include <stdlib.h>
int n=; void swap(int *a, int *b)
{
int m;
m=*a;
*a=*b;
*b=m;
}
void perm(int list[], int k, int m)
{
int i;
if(k==m)
{
for(i=;i<=m;i++)
printf("%d ",list[i]);
printf("\n");
n++;
}
else
{
for(i=k;i<=m;i++)
{
swap(&list[k],&list[i]);
perm(list, k+, m);
swap(&list[k], &list[i]);
}
}
}
int main(void)
{
int list[]={,,,,,,};
perm(list,,);
printf("total:%d\n",n);
system("pause");
return ;
}

求字典顺序的下一个全排列

 #include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int m;
m=*a;
*a=*b;
*b=m;
}
void perm(int list[], int len)
{
int i=;
int k=;
int n=len;
int j=;
for(;j<=len;j++)
{
if(list[j-]<list[j])
i=j;
}
for(j=;j<=len;j++)
{
if(list[i-]<list[j])
k=j;
}
swap(&list[i-],&list[k]);
for(j=;j<=i;j++)
{
printf("%d ",list[j]);
}
for(j=len;j>i;j--)
{
printf("%d ",list[j]);
}
}
int main(void)
{
int list[]={,,,,,,};
perm(list,);
system("pause");
return ;
}