時間過得很快,不知多久沒寫些東西了,隨著工齡的變長,每天寫程式的時間也漸漸減少了,但技術在我的工作和生活中還是佔著重要的地位,今天心情不錯,泡泡論壇,寫寫代碼,溫故知新。原創代碼,如有錯誤請拍磚。
回顧高中數學課本:
從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當m=n時所有的排列情況叫全排列。
package com.syj.csdn;</p><p>import java.util.ArrayList;<br />import java.util.Arrays;<br />import java.util.List;</p><p>/**<br /> * <p><br /> * Title:全排列演算法<br /> * </p><br /> *<br /> * <p><br /> * Copyright: http://blog.csdn.net/sunyujia/<br /> * </p><br /> *<br /> * @author 孫鈺佳<br /> * @main sunyujia@yahoo.cn<br /> * @date 2009-04-25 23:57:23 PM<br /> */<br />public class FullSort {<br />//將NUM設定為待排列數組的長度即實現全排列<br />private static int NUM = 3;</p><p>/**<br /> * 遞迴演算法:將資料分為兩部分,遞迴將資料從左側移右側實現全排列<br /> *<br /> * @param datas<br /> * @param target<br /> */<br />private static void sort(List datas, List target) {<br />if (target.size() == NUM) {<br />for (Object obj : target)<br />System.out.print(obj);<br />System.out.println();<br />return;<br />}<br />for (int i = 0; i < datas.size(); i++) {<br />List newDatas = new ArrayList(datas);<br />List newTarget = new ArrayList(target);<br />newTarget.add(newDatas.get(i));<br />newDatas.remove(i);<br />sort(newDatas, newTarget);<br />}<br />}</p><p>public static void main(String[] args) {<br />String[] datas = new String[] { "a", "b", "c", "d" };<br />sort(Arrays.asList(datas), new ArrayList());<br />}</p><p>}<br />
結果:
abc
abd
acb
acd
adb
adc
bac
bad
bca
bcd
bda
bdc
cab
cad
cba
cbd
cda
cdb
dab
dac
dba
dbc
dca
dcb