概念:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
公式:全排列数f(n)=n!(定义0!=1)

package recursive;

public class Permutation {

    public static int[] text = {1,2,3,4,5};
    public static int count=0;

    public static void permutation(int a[], int m, int n) {//递归调用,每次这交换两个元素,如此反复
        int i;
        int t;
        if (m < n - 1) {
            permutation(a, m + 1, n);
            for (i = m + 1; i < n; i++) {
                t = a[m];          //每次交换有序数组的后两个元素
                a[m] = a[i];
                a[i] = t;
                permutation(a, m + 1, n); //将交换的元素换回原来的位置,递归至原始状态
                t = a[m];
                a[m] = a[i];
                a[i] = t;
           }
        } else {
            printResult(a);  //交换完成后输入重新排列后的结果
        }
    }

    public static void printResult(int[] text) {
        for (int i = 0; i < text.length; i++) {
            System.out.print(text[i]);
        }
        System.out.print(" ");
        count=count+1;
        if(count%5==0) {
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        permutation(text, 0, text.length);
        System.exit(0);

    }


}