package algorithm;
/**
* 全排列问题解的思路: 将数组中的每一个数放到第一个位置上,其他的数进行全排列
* @author su
*
*/
public class FullPermutation {
public static void main(String[] args) {
/*int[] a = {1,2,3,4,5};
fullPermutation(a, 0, 4);*/
int[] a = {1,2,3};
fullPermutation(a, 0, 2);
}
/**
* 打印数组a
* @param a
*/
private static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] +" ");
}
System.out.println();
}
/**
* 交换数组中索引为i和j处的数值
* @param a
* @param i
* @param j
*/
private static void swap(int[] a, int i, int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
/**
*
* @param a 数组a为要全排列的数组
* @param start 数组a的开始索引值
* @param end 数组a的结束索引值
*/
private static void fullPermutation(int[] a, int start, int end){
if(start == end){
printArray(a);
}else{
for(int i = start; i<= end; i++){
swap(a, start, i);
fullPermutation(a, start+1, end);
swap(a, start, i);
}
}
}
}