1.问题描述
从n个不同元素中任取m(m ≤ n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m = n时所有的排列情况叫全排列。
用算法分别实现全排列,其中n个元素存储在一个长度为n的数组中。
2.算法描述
实现全排列之前,先看一下对{1,2,3}进行全排列的一种方法:
从图中可以看出,我们首先从n个元素中取出一个元素作为一个排列的第一个元素,然后对剩余的n-1个元素进行全排列,所以可以使用递归实现。
3.算法实现
/**
*
* @param array
* 进行排列的数据集合
* @param start
* 对数组中进行排列的那些元素的起始下标
*/
public static void permute(int[] array, int start) {
if (start == array.length) {
System.out.println(Arrays.toString(array));
} else {
for (int i = start; i < array.length; i++) {
swap(array, start, i);
permute(array, start + 1);
swap(array, i, start);
}
}
}
4.测试代码
public static void main(String[] args) {
System.out.println("Test permute:");
int[] array1 = { 1, 2, 3 };
permute(array1, 0);
}