Johnson Trotter(JT)演算法求全排列

2022-09-08 17:33:15 字數 2441 閱讀 5777

johnson-trotter演算法描述

演算法  johnsontrotter(n)

//實現用來生成排序的 johnson-trotter 演算法

//輸入:正整數n(代表序列1,2,···,n)

//輸出:的全排列

將第乙個全排列初始化為

while存在乙個移動元素do

求最大的移動元素 k

把 k 和它箭頭指向的相鄰元素互換

調轉所有大於 k 的元素的方向

將新排列新增到排列中

以 n=3 為例

下面我將貼出johnson-trotter演算法的j**a**

1

package

jt;2

3import

j**a.util.scanner;45

public

class

johnson_trotter 18}

19//

右邊20

else25}

26}27return

k;28}29

//元素和方向的交換

30public

static

int swap2(int array, boolean f, int i, int

j) 39

//調轉方向

40public

static

boolean reverseid(int array, int k, boolean

f) 45}

46return

f;47}48

49public

static

void jt(int

n) 61

//輸出第乙個初始化的排列,此排列不會自動生成

62for(int i = 0; i < n; i++)

66system.out.println();

67//

初始化k,獲取第乙個可移動的最大元素

68 k =maxk(n, idata, flag);

69//

迴圈直到沒有可移動的元素

70while(k != -1)

78//

可向左移動

79else

83 flag = reverseid(idata, k, flag);//

調轉所有大於k的元素的方向

84//

輸出當前的乙個排列

85for(int i = 0; i < n; i++)

89system.out.println();

90 k = maxk(n, idata, flag);//

獲取下乙個k91}

92}9394

public

static

void

main(string args)

100 }

**執行結果如下:(帶有元素方向)

please put in n :4

1false2false3false4false

1false2false4false3false

1false4false2false3false

4false1false2false3false

4true1false3false2false

1false4true3false2false

1false3false4true2false

1false3false2false4true

3false1false2false4false

3false1false4false2false

3false4false1false2false

4false3false1false2false

4true3true2false1false

3true4true2false1false

3true2false4true1false

3true2false1false4true

2false3true1false4false

2false3true4false1false

2false4false3true1false

4false2false3true1false

4true2false1false3true

2false4true1false3true

2false1false4true3true

2false1false3true4true

process finished with exit code 0

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

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

乙個求全排列的演算法

全排列是將一組數按一定順序進行排列,如果這組數有n個,那麼全排列數為n 個。現以為例說明如何編寫全排列的遞迴演算法。1 首先看最後兩個數 4,5。它們的全排列為4 5和5 4,即以4開頭的5的全排列和以5開頭的4的全排列。由於乙個數的全排列就是其本身,從而得到以上結果。2 再看後三個數3,4,5。它...

2011 4 15 快排演算法,堆排演算法

template int get pivot index value type array,int start,int end value type pivot array start while start end while startpivot end array start array en...