package com.zyl;
import java.util.Arrays;
/**
* 算法流程
* 1.判断是否为只有一个数字的全排列,即p==q,是则打印数组------->结束条件
* 2.交换脚标为p和i的数字(i从p到q)
* 3.对剩下的p+1到q全排列
* 4.将脚标为p和i的交换回来,避免乱序
* @author ZYL
*
*/
public class Permutation {
public static int count =0;
public static void swap(int[] arr,int i,int j) {
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void permutation(int[] arr,int p,int q) {
if(p==q) {
System.out.println(Arrays.toString(arr));
count++;
}else {
for(int i = p;i<q;i++) {
swap(arr,p,i);
permutation(arr, p+1, q);
swap(arr,p,i);
}
}
}
public static void main(String[] args) {
int[] arr = {1,2,3,4};
permutation(arr, 0, arr.length);
System.out.println("共计:"+count);
}
}