package temp;
/**
* 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列
*
* @param datas
* @param target
*/
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
public class T06 {
// 输出
public static void print(List target){
for(Object o: target){
System.out.print(o);
}
System.out.println();
}
// 递归排列
public static void sort(List datas,List target,int n){
if(target.size()==n){
print(target);
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,n);
}
}
// 主函数
public static void main(String[] args){
String[] s = {"a","b","c"};
sort(Arrays.asList(s),new ArrayList(),s.length);
}
}
运行结果:
abc
acb
bac
bca
cab
cba
方法二:
public class AllSort{
public static void perm(String[] buf,int start,int end){
if(start==end){//当只要求对数组中一个字母进行全排列时,只要按该数组输出即可
for(int i=0;i<=end;i++){
System.out.print(buf[i]);
}
System.out.println();
}
else{//多个字母全排列
for(int i=start;i<=end;i++){
String temp=buf[start];//交换数组第一个元素与后续的元素
buf[start]=buf[i];
buf[i]=temp;
perm(buf,start+1,end);//后续元素递归全排列
temp=buf[start];//将交换后的数组还原
buf[start]=buf[i];
buf[i]=temp;
}
}
}
public static void main(String[] args) {
String buf[]={"a","b","c"};
perm(buf,0,buf.length-1);
}
}
运行结果:
abc
acb
bac
bca
cba
cab