昨晚心血來潮,想起全排列演算法,但是忘記怎麼實現,所以就自己再次試圖編寫**實現。
晚上想不出來,想不到,一覺醒來後,一下子就寫好了!
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 進行交換,生成下乙個排列,直到所有排列生成完畢為止,這樣,當前排列與其後繼排列只是兩個相鄰位置的元素發生了調換。當然,為了防止重複生成某...