1.全排列就是从第一个数字起每个数分别与它后面的数字交换。
2.去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。
3.全排列的非递归就是由后向前找替换数和替换点,然后由后向前找第一个比替换数大的数与替换数交换,最后颠倒替换点后的所有数据。
全排列的递归实现
举个例子,123的全排列有123、132、213、231、312、321,通过观察可以发现,全排列就是从第一个数字起每个数分别于它后边的数组交换
代码如下:
//全排列的递归实现
#include<iostream>
#include<cstdlib>
using namespace std;
//交换data数组中的a位置和b位置的数
void swap( int *data, int a, int b )
{
int t = data[a];
data[a] = data[b];
data[b] = t;
}
//对data数组进行递归全排列
//count存放全排列的个数
//array存放所有的全排列
void full_recursion( int *data, int m, int n, int &count, int *array )
{
if( m == n )
{
for( int i=0; i<=n; i++ )
{
*( array +