/** * 书本:【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; }
原文:http://blog.csdn.net/cutter_point/article/details/39677391