您的位置:首页 > 其它

递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列

2013-03-22 13:38 211 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐