首页 > 代码库 > 递归算法:求序列的全排列

递归算法:求序列的全排列

用C++模板书写一段序列数组的全部排列


/**
* 书本:【windows程序设计】
* 功能:输出全部的排列情况
* 文件:全排列.cpp
* 时间:2014年9月29日21:52:55
* 作者:cutter_point
*/

#include <iostream>

using namespace std;

//交换两个元素的函数
template<class Type>
inline void Swap(Type &a, Type &b)  //取两个元素的引用,等会来交换
{
    Type temp=a;
    a=b;
    b=temp;
}

//这个是一个递归为了输出全部的排列情况
template<class Type>
void Perm(Type list[], int k, int m)
{
    //这个函数是为了产生全部的排列情况
    if(k == m)  //就是当k和m相等的时候,就输出序列
    {//就是剩下一个元素的时候
        for(int i=0 ; i <= m ; ++i)
            cout<<list[i]<<' ';
        cout<<endl;
    }
    else    //还有多个元素等待排列,递归产生排列
    {
        for(int i=k ; i <= m ; ++i) //从第k个开始吧第k个和i个交换输出
        {
            Swap(list[k], list[i]); //交换第k和第i个元素
            Perm(list, k+1, m);     //只要不是最后一个,就是第二个参数不是最后一个时,调用自己
            Swap(list[i], list[k]); //换回来,进行下一个排列的变换
        }
    }
}



int main()
{
    int n;      //要进行排序的个数
    //定义一个序列的个数
    cout<<"输入你想要进行排序的个数"<<endl;
    cin>>n;
    int a[n];   //存放全部的个数
    cout<<"输入序列:"<<endl;
    for(int i=0 ; i < sizeof(a)/sizeof(int) ; ++i)
        cin>>a[i];

    cout<<"全部的排序结果:"<<endl;
    Perm(a, 0, sizeof(a)/sizeof(int)-1);

    int m;      //要进行排序的个数
    //定义一个序列的个数
    cout<<"输入你想要进行排序的字符个数"<<endl;
    cin>>m;
    char b[m];   //存放全部的个数
    cout<<"输入字符序列:"<<endl;
    for(int i=0 ; i < sizeof(b)/sizeof(char) ; ++i)
        cin>>b[i];

    cout<<"全部的排序结果:"<<endl;
    Perm(b, 0, sizeof(b)/sizeof(char)-1);

    return 0;
}

我在想我是接下来搞算法还是搞QT呢????

递归算法:求序列的全排列