實現起來有很多方法,下面介紹一個代碼最簡單的,但理解起來稍微費點勁的算法。。
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class FullSort { //將NUM設置為待排列數組的長度即實現選擇排列 private static int NUM = 3; /** * 遞歸算法:將數據分為兩部分,遞歸將數據從左側移右側實現選擇排列 * * @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){//當只要求對數組中一個字母進行全排列時,只要就按該數組輸出即可(特殊情況) for(int i=0;i<=end;i++){ System.out.print(buf); } System.out.println(); } else{//多個字母全排列(普遍情況) for(int i=start;i<=end;i++){//(讓指針start分別指向每一個數) char temp=buf[start];//交換數組第一個元素與后續的元素 buf[start]=buf; buf=temp; perm(buf,start+1,end);//后續元素遞歸全排列 temp=buf[start];//將交換后的數組還原 buf[start]=buf; buf=temp; } } } }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
