您的位置:首页 > 其它

递归与分治策略-2.1.4全排列

2017-12-03 23:25 260 查看
public class test2_1_4 {
public static void perm(Object[] list,int k,int m){
//产生list[k:m]的所有排列
if(k==m){
//只剩一个元素
for(int i=0;i<=m;i++)
System.out.print(list[i]);
System.out.println();
}else{
//还有多个元素,递归产生排列
for(int i=k;i<=m;i++){
swap(list,k,i);
perm(list,k+1,m);
swap(list,k,i);
}
}
}
public static void swap(Object[] list,int i,int j){
Object obj;
obj = list[i];
list[i] = list[j];
list[j] = obj;
}
public static void main(String[] args) {
Object[] list = {"1","2","3"};
perm(list,0,list.length-1);
}
}


运行结果如下:

123
132
213
231
321
312


递归调用详细过程:

1.swap(list,2,2);
perm(list,3,3);   123
swap(list,2,2);

swap(list,1,1); 2.swap(list,2,3);
perm(list,2,3);   perm(list,3,3);   132
swap(list,1,1);   swap(list,2,3);
----------------------------------
1.swap(list,2,2);
perm(list,3,3);   213
swap(list,2,2);

swap(list,1,2); 2.swap(list,2,3);
perm(list,2,3);   perm(list,3,3);   231
swap(list,1,2);   swap(list,2,3);
----------------------------------
1.swap(list,2,2);
perm(list,3,3);   321
swap(list,2,2);

swap(list,1,3); 2.swap(list,2,3);
perm(list,2,3);   perm(list,3,3);   312
swap(list,1,3);   swap(list,2,3);
----------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: