全排列演算法

2021-10-25 07:49:36 字數 830 閱讀 2315

全排列演算法是日常經常用到的乙個演算法,這裡使用遞迴解決。

源**:

public

class 全排列

;perm

(arr,

0, arr.length);}

static

void

perm

(int

arr,

int p,

int q)

else}}

static

void

swap

(int

arr,

int i,

int j)

static

void

print

(int

arr)

}}

詳解:

arr = 1 2 3

第一次 把 1 提在最前面 對 23進行全排列 接著把 2提在最前面(此時陣列為123) 對3進行全排列 因為只有乙個3 遞迴出口 輸出 1 2 3

接著回溯到上乙個遞迴函式中,把i 和 p位置的元素換回來 接著把3提到前面 (此時陣列為132)對2 進項全排列,因為只有乙個元素遞迴出口輸出132

回溯到最開始的遞迴函式 即1在陣列首部位置

接著換位i 和 p位置的元素

(第一次 全排列是123本身 沒有太大效果)

第二次 把2 提在最前面 此時i =1,p仍然為0 所以陣列第乙個元素為2,接著對13進行全排列 把1提在最前面 對3進行全排列 只有乙個元素 遞迴出口 輸出213

。。。(中間過程省略 原理相同 只寫結果)

231321

312

演算法 全排列

從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。用演算法分別實現全排列,其中n個元素儲存在乙個長度為n的陣列中。實現全排列之前,先看一下對進行全排列的一種方法 從圖中可以看出,我們首先從n個元素中取出乙個元...

全排列演算法

1.遞迴全排列 分別將每個位置交換到最前面位,之後全排列剩下的位。遞迴全排列 1 2 3 4 5 1,for迴圈將每個位置的資料交換到第一位 swap 1,1 5 2,按相同的方式全排列剩餘的位 2.字典序全排列演算法 對給定的字符集中的字元規定了乙個先後關係,在此基礎上規定兩個全排列的先後是從左到...

全排列演算法

1.遞迴生成1 n的全排列 示例程式 include using namespacestd void print intn,int a,int cur int main int num while cin num int a 30 print num,a,0 return 0 void print ...