全排列算法的思想
全排列算法
題目要求:
輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串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; } //----------------------------------------------
總結
- 上一篇: 设计模式--观察者模式
- 下一篇: 算法笔试题