實現(xiàn)起來有很多方法,下面介紹一個代碼最簡單的,但理解起來稍微費點勁的算法。。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class FullSort {
//將NUM設(shè)置為待排列數(shù)組的長度即實現(xiàn)選擇排列
private static int NUM = 3;
/**
* 遞歸算法:將數(shù)據(jù)分為兩部分,遞歸將數(shù)據(jù)從左側(cè)移右側(cè)實現(xiàn)選擇排列
*
* @param datas
* @param target
*/
private static void sort(List datas, List target) {
if (target.size() == NUM) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
public static void main(String[] args) {
String[] datas = new String[] { "a", "b", "c", "d" };
sort(Arrays.asList(datas), new ArrayList());
}
}
這段代碼里面的return用的很厲害,大家自己慢慢體會一下~
下面是全排列的一種算法,也很巧妙簡單~
public class AllSort{
public static void main(String[] args) {
char buf[]={'a','b','c'};
perm(buf,0,buf.length-1);
}
public static void perm(char[] buf,int start,int end){
if(start==end){//當只要求對數(shù)組中一個字母進行全排列時,只要就按該數(shù)組輸出即可(特殊情況)
for(int i=0;i<=end;i++){
System.out.print(buf);
}
System.out.println();
}
else{//多個字母全排列(普遍情況)
for(int i=start;i<=end;i++){//(讓指針start分別指向每一個數(shù))
char temp=buf[start];//交換數(shù)組第一個元素與后續(xù)的元素
buf[start]=buf;
buf=temp;
perm(buf,start+1,end);//后續(xù)元素遞歸全排列
temp=buf[start];//將交換后的數(shù)組還原
buf[start]=buf;
buf=temp;
}
}
}
}
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

