演算法系列 全排列演算法 Java實現

2021-08-25 12:40:53 字數 1018 閱讀 3350

昨晚心血來潮,想起全排列演算法,但是忘記怎麼實現,所以就自己再次試圖編寫**實現。

晚上想不出來,想不到,一覺醒來後,一下子就寫好了!

public class quanpailie 

array[a] = array[a] ^ array[b];

array[b] = array[a] ^ array[b];

array[a] = array[a] ^ array[b];

}public static void print(int array)

system.out.println();

total++;

}/**

* 陣列第乙個元素固定,

* 其他後續的元素再allrank(array, begin + 1, length);

* (當然,還需要輪流讓每個元素放在第一位)

* * @param array

* @param begin

* @param length

*/public static void allrank(int array, int begin, int length) else }}

public static void main(string args) ;

allrank(array, 0, 5);

system.out.println("不同順序的總數(5!):" + total + "\n allrank()被呼叫的總數:" + call);

}}

輸出:

不同順序的總數(5!):120

allrank()被呼叫的總數:206

以下補充於20101204:

ps:對於圓形(或頭尾相連的陣列)的全排列演算法 ,只要把其中乙個數(就選第乙個數吧)固定(而不是輪流選擇乙個數放在第一位),剩下的n-1個數進行全排列,即可,總數是(n-1)! = n! / n 。感謝acm牛人傻濤的幫助!

java演算法系列

棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...

java全排列演算法

遞迴全排列 以num 1,2,3,4,5 為例 1.f1 0,num 2.i 0 i 4遞迴到最後乙個元素,輸出1 2 3 4 5 3.i 4 i 3交換4 5,i 3 i 4,輸出1 2 3 5 4 4.i 4 i 3,5 4換回來,for迴圈完畢,返回上一層 5.i 3 i 2 交換3 4,i ...

全排列生成演算法java實現

steinhaus johnson trotter演算法是一種基於最小變換的全排列生成演算法,對於排列a 1.n 該演算法通過將a i 與a i 1 或a i 1 進行交換,生成下乙個排列,直到所有排列生成完畢為止,這樣,當前排列與其後繼排列只是兩個相鄰位置的元素發生了調換。當然,為了防止重複生成某...