乙個求全排列的演算法

2021-04-28 20:05:17 字數 903 閱讀 4856

全排列是將一組數按一定順序進行排列,如果這組數有n個,那麼全排列數為n!個。現以為例說明如何編寫全排列的遞迴演算法。

1、首先看最後兩個數:4, 5。 它們的全排列為4 5和5 4, 即以4開頭的5的全排列和以5開頭的4的全排列。

由於乙個數的全排列就是其本身,從而得到以上結果。

2、再看後三個數3, 4, 5。它們的全排列為3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六組數。

即以3開頭的和4,5的全排列的組合、以4開頭的和3,5的全排列的組合和以5開頭的和3,4的全排列的組合.

從而可以得出推斷,設一組數p = , 全排列為perm(p),pn = p - 。

因此perm(p) = r1 perm(p1), r2 perm(p2), r3 perm(p3), ... , rn perm(pn)。當n = 1時perm(p} = r1。

為了更容易理解,將整組數中的所有的數分別與第乙個數交換,這樣就總是在處理後n-1個數的全排列。

演算法如下:

#include 

<

stdio.h

>

intn =0

;  void

swap(

int*

a, int

*b) 

void

perm(

intlist, 

intk, 

intm) 

else

} } 

intmain() 

;     

perm(list, 0, 

4);     

printf(

"total:%d/n

", n);     

return0; 

}  同作者一樣,希望大家有更好的演算法上傳

求全排列演算法簡單的實現

求全排列演算法實現 一 遞迴實現 假如是乙個陣列,無重複元素的全排列,其簡單的遞迴實現演算法思想如下 假如 allsort a b c 分治思想化為a allsort b c b allsort a c c allsort a b 遞迴一層後計算第二層時 如allsort b c 時,化為b all...

乙個蛇形排列演算法(C )

問題 有這樣一類問題,例如新生入學分班,現有100名新生,要分到4個班級裡,要求每個班級的學生成績基本平均。假設新生的入學分數就是100,99,98,97,96,95,3,2,1。分班結果如下 0班 1班 2班 3班 100 99 98 97 93 94 95 96 92 91 90 89 85 8...

排列演算法彙總(下乙個排列,全排列,第K個排列)

一 下乙個排列 首先,stl提供了兩個用來計算排列組合關係的演算法,分別是next permutation和prev permutation。next permutation nums.begin nums.end 下乙個排列 prev permutation nums.begin nums.end...