排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;

全排列:当n==m时,称为全排列;

 

比如:集合{ 1,2,3}的全排列为:

{ 1 2 3} 
{ 1 3 2 }
{ 2 1 3 }
{ 2 3 1 }
{ 3 2 1 }
{ 3 1 2 }

 

我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致;

 

全排列递归算法 python 全排列递归算法题_数组

算法思路:

(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);

(2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组;

(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组;

 

#include<iostream>

using namespace std;

void permutation(char *str, int k, int m)
{
    if (k == m)
    {
        for (int i = 0; i <= m; i++)
        {
            cout << str[i];
        }
        cout << endl;
    }
    else
    {
        for (int j = k; j <= m; j++)
        {
            swap(str[j], str[k]);
            permutation(str, k + 1, m);
            swap(str[j], str[k]);
        }
    }
}