全排列算法
题目要求:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
总体的思想是固定前面的某些元素位,比如1,2,3全排列时,先固定1,排后面的2,3,就有(1,2,3),(1,3,2)两种排列。让算法理解简化的一步是。将数组中的所有元素分别与第一个元素进行交换,这样就总是排列后面的n-1个元素。
//====递归算法==========================
void Permu(int list[ ] , int n , int index)
{if(index == n-1)printf(list);elsefor(int i=index;i<n;i++){swap(list[i] , list[index]);Permu(list , n , index+1 );swap(list[i] , list[index] );}
}
int main( )
{int list[ ] = {1,2,3};Permu(list, 3, 0);return 0;
}
//----------------------------------------------