package test;
import java.util.Arrays;
/**
* @author:Avery
* @description:全排列之分治组合
* 分治法是一种很重要的算法。
* 字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的
* 相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题
* 可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很
* 多高效算法的基础,如排序算法(快速排序,归并排序),
* @date:2017年7月15日
*/
public class Combination {
public static void testCombination(char[] n, int start, int end) {
if (start == end) {// 当只要求对数组中一个字母一个字母进行全排列时,就按该数组输出就可
System.out.println(Arrays.toString(n));
} else {
for (int i = start; i <= end; i++) {
char temp = n[start];// 交换数组第一个元素与后续元素
n[start] = n[i];
n[i] = temp;
testCombination(n, start + 1, end);
temp = n[start];// 将交换后的数组还原
n[start] = n[i];
n[i] = temp;
}
}
}
* @author:Avery
* @description:全排列之分治组合
* 分治法是一种很重要的算法。
* 字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的
* 相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题
* 可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很
* 多高效算法的基础,如排序算法(快速排序,归并排序),
* @date:2017年7月15日
*/
public class Combination {
public static void testCombination(char[] n, int start, int end) {
if (start == end) {// 当只要求对数组中一个字母一个字母进行全排列时,就按该数组输出就可
System.out.println(Arrays.toString(n));
} else {
for (int i = start; i <= end; i++) {
char temp = n[start];// 交换数组第一个元素与后续元素
n[start] = n[i];
n[i] = temp;
testCombination(n, start + 1, end);
temp = n[start];// 将交换后的数组还原
n[start] = n[i];
n[i] = temp;
}
}
}
public static void main(String[] args) {
// char[] n={'1','2','3'};//测试用例1
// testCombination(n,0,2);
char[] n = { '1', '2', '3', '4', '5' };// 测试用例2
testCombination(n, 0, 4);
}
}
// char[] n={'1','2','3'};//测试用例1
// testCombination(n,0,2);
char[] n = { '1', '2', '3', '4', '5' };// 测试用例2
testCombination(n, 0, 4);
}
}