首页 > 编程知识 正文

c语言程序代码(c语言程序全排列算法思路,全排列算法的原理和实现代码)

时间:2023-05-06 12:44:28 阅读:121167 作者:4166

所有数组是将一组数按照一定的顺序排列而成的,如果一组数有n个,则所有数组数为n! 个。 本节以{1、2、3、4、5}为例,说明如何创建所有数组的递归算法。

1、先看最后两个数4、5。 它们的全部序列是4 5和5 4,即以4开始的5的全部序列和以5开始的4的全部序列。

因为一个数的全部排列是其自身,所以得到以上的结果。

2、看看后面的三个数3、4、5。 它们的全部排列为3 4 5、3 5 4、4 3 5、4 5 3、5 3 4、54这6组数。

也就是说,以3开始的和4,5的全部排列的组合,以4开始的和3,5的全部排列的组合,以5开始的和3,4的全部排列的组合。

因此,如果设一组数p={r1,r2,r3,rn},则可以推测全部序列为perm(P ),pn=p - {rn}。

因此,perm(p )=R1perm ),P1 ),R2perm ),R3perm ),rnperm ) pn )。 n=1时,perm(p )=R1。

为了清楚起见,如果将组整体数中的所有数分别与第一个数进行交换,则总是处理后的n-1个数的全部数组。

算法如下。

#包含

int n=0;

语音快照(int *b,int *b ) )。

{

int m;

m=*a;

*a=*b;

*b=m;

}

voidperm(intlist[],int k,int m ) )。

{

int i;

If (千米) )。

{

for(I=0; 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 1,m );

swap(list[k],list[i];

}

}

}

int main () )

{

intlist [ ]={ 1,2,3,4,5 };

perm (列表,0,4 );

printf (总3360 % d (n ),n );

返回0;

}

如果有更高效的递归算法和非递归算法,请重新粘贴。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。