做数学相关的我习惯性就是从定义出发,虽然全排列很简单还是要啰嗦一下。
全排列的定义:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
公式:全排列数f(n)=n!(定义0!=1)。
具体思路:
1.假设现在有从1~n个数字。首先要理解全排列的第一个数字就是从这n个数字里任选一个,然后第二个数字从剩下n-1个数字中任选一个以此类推。。。然而我们没有那么完美的随机函数,只能够选择去遍历。
2.遍历的过程中肯定会遇到重复的情况,怎么办呢!
3.为了避免重复就需要对已经选过的数字进行判断,如果遇到了前面已经选到的就跳过,去选择那些没有选到过的。这样也实现了全排列。
接下来就是代码实现了。
代码如下:
#include<iostream>
using namespace std;
#include<stdlib.h>
//全排列
void allrank(int r,int *array,int n)
//r是已经排列的元素个数,array是存储数据的数组