全排列的递归算法:
Code
template <class Type>
inline void Swap(Type &a,Type &b)
{
Type temp=a;
a=b;
b=temp;
}
void Perm(Type list[],int k,int m)
{ //产生list[k:m]的所有排列
if(k==m)
{ //只剩下1个元素
for(int i=0;i<m;i++)
cout << list[i];
cout << endl;
}
else //还有多个元素待排列,递归产生排列
for(int i=k;i<m;i++)
{
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}
template <class Type>
inline void Swap(Type &a,Type &b)
{
Type temp=a;
a=b;
b=temp;
}
void Perm(Type list[],int k,int m)
{ //产生list[k:m]的所有排列
if(k==m)
{ //只剩下1个元素
for(int i=0;i<m;i++)
cout << list[i];
cout << endl;
}
else //还有多个元素待排列,递归产生排列
for(int i=k;i<m;i++)
{
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}
这个排序还是很经典的,以致于我们花了一节课的时间在研究该递归。