/**
* 递归分治算法学习之全排序
* @author Sking
*/
package 递归分治;
public class FullPermutation {
/**
* 产生指定数组指定索引范围的元素的全排列
* list[k....m]的全排列,在全排列中list[k..m]
* 中的任何一个元素都可能在索引k的位置上。
* 所以交换出list[k]的位置,相当于确认了全排列
* 中的首个元素,然后进行递归全排列。
* @param list
* 指定数组
* @param k
* 指定范围的起始索引
* @param m
* 指定范围的结束索引
*/
private void perm(Object[] list, int k, int 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);//list[i]位置确定在索引k上
perm(list, k + 1, m);//递归全排列
swap(list, k, i);
}
}
/**
* 交换指定数组中的元素
*
* @param list
* 指定数组
* @param i
* 第一个交换元素的索引
* @param j
* 第二个交换元素的索引
*/
private static void swap(Object[] list, int i, int j) {
Object temp = list[i];
list[i] = list[j];
list[j] = temp;
}
public static void main(String[] args) {
}
}
递归分治算法之全排列问题(Java版本)
最新推荐文章于 2022-02-09 16:41:58 发布