从n个不同元素中任取m(m≤n)個元素按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列当m=n时所有的排列情况叫全排列。如果这组数有n个那么铨排列数为n!个。
这里先说两个概念:“下一个排列组合”和“上一个排列组合”对序列 {a, b, c},每一个元素都比后面的小按照字典序列,固定a之后a比bc都小,c比b大它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c}同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c,
b.参数说明: arr: 数組名 size:数组元素个数c.函数功能: 返回值为bool类型,当当前序列不存在下一个排列时函数返回false,否则返回true排列好的数在数组中存储
d.注意:在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数
b.参数说明: arr: 数组名 size:数组元素个数c.函数功能: 返回值为bool类型,当当前序列不存在上一个排列时函数返回false,否则返回trued.注意:在使用前需要对欲排列数组按降序排序否则只能找出該序列之后的全排列数。
///注意数组顺序必要时要对数组先进行排序
四、全排列递归思路
我们可以将这个排列问题画成图形表示,即排列枚举树比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致;
(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);
(2)出口:如果只有一个元素的全排列则说明已经排完,则输出数组;
(3)不断将每个元素放作第一个元素然后将这个元素作为前缀,并将其余元素继续全排列等到出口,出口出去后还需要还原数组;
if(end==begin){ //一到递归的出口就输出数组此数组为全排列