递归与分治策略-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); ----------------------------------
相关文章推荐
- 递归和分治策略之排列问题
- 第二章 递归与分治策略(排列的字典序问题)
- 算法读书笔记——递归与分治策略
- 分治策略、动态规划、贪婪选择以及递归之间的关系与区别(-)
- 递归与分治策略
- 算法设计与分析笔记之(2):递归与分治策略
- 递归与分治策略-2.8快速排序
- 第2章 递归与分治策略,二分搜索技术(查找不成功时,返回区间位置)
- 递归与分治策略之线性时间选择(随机划分线性选择)
- 递归与分治策略(3)
- 排列与组合中的递归策略(as3.0)
- Java语言描述:递归与分治策略之合并排序与快速排序
- 递归与分治策略之二分搜索算法
- Java语言描述:递归与分治策略之全排列问题
- 第二章 递归与分治策略
- 计算机算法设计与分析——递归与分治策略(二)
- 递归与分治策略之棋盘覆盖问题
- 【学习笔记】递归和分治策略
- 递归与分治策略之快速排序
- 算法笔记2 递归与分治策略