新手请教JAVA全排列

qq294235090 2014-01-08 06:54:47
public class AllSort{
public static void main(String[] args) {
char buf[]={'a','b','c',‘d’,‘e’};

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[i]);
}
System.out.println();
}
else{
for(int i=start;i<=end;i++){
char 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;
}
}

谁能解释一下else后面的语句到底是怎样运行的吗
如果可以的话用abcde作为初始数组进行排列
让我看一下过程
我现在需要画这个的一个程序的流程图
在这个地方引进其他判断方法时搞晕了
谢谢
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq294235090 2014-01-08
  • 打赏
  • 举报
回复
引用 2 楼 jakie_wang 的回复:
假设输入集合为abc (abcde太长了,不方便解释)。 固定a, 求后面bc的全排列,abc,acb. 求好后,将abc中,a和b对调,得到bac 固定b,求后面ac的全排列,bac,bca,求好后,将abc中,a和c对调,得到cba 固定c,求后面ba的全排列,cba,cab,求好后,结束。 关键是理解两个交换值的部分: 第一个交换目的从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列 第二个交换目的是恢复被perm函数交换前的排列,因此总是对abc中的元素做对调
谢谢 懂了
装逼惯犯 2014-01-08
  • 打赏
  • 举报
回复
好高深.不懂帮顶.
锅盖头 2014-01-08
  • 打赏
  • 举报
回复
假设输入集合为abc (abcde太长了,不方便解释)。 固定a, 求后面bc的全排列,abc,acb. 求好后,将abc中,a和b对调,得到bac 固定b,求后面ac的全排列,bac,bca,求好后,将abc中,a和c对调,得到cba 固定c,求后面ba的全排列,cba,cab,求好后,结束。 关键是理解两个交换值的部分: 第一个交换目的从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列 第二个交换目的是恢复被perm函数交换前的排列,因此总是对abc中的元素做对调
静山晚风 2014-01-08
  • 打赏
  • 举报
回复
代码虽然短,但是却思路有点绕,希望楼主先自己根据自己的思路写一遍,你会发现你写的代码和他上面的类似。实际写的时候会碰到代码中类似的思路。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧