数组元素全排列递归算法
/** * 使用的是递归算法实现集合内元素的全排列 * @author height * */ public class AllSort { int n;//记录总的个数 static int temp[];//记录自然数的数组 /** * 用于交换数组中位置n1和n2的数 * @param n1 * @param n2 */ void swap(int n1,int n2) { int tem = temp[n1]; temp[n1] = temp[n2]; temp[n2] = tem; } /** * 递归方法,思想: * 求集合P={r1,r2,r3,...,rn}的全排列。设Pt(r1)是指在集合P中去除元素r1后的集合,也就是r1相对于P的补集 * 则P的全排列Perm(P)=r1Perm(Pt(r1))+r2Perm(Pt(r2))+...+rnPerm(Pt(rn)). * 由此,将n规模的全排列降为了n-1规模的全排列,此为该递归的基本思想。直到n=1的时候一个元素的全排列是自己 * @param num 存集合的数组 本例中使用自然数 * @param k 第一个元素在数组中的位置 * @param m 最后一个元素在数组中的位置 */ void perm(int num[],int k,int m) { int i; if(k>m) { for(i = 0 ;i<=m;i++) { System.out.print(temp[i]+" "); } System.out.println(); n++; } else { for(i = k;i<=m;i++) { swap(k,i); perm(temp,k+1,m); swap(k,i); } } } /** * 测试方法 * @param args */ public static void main(String args[]) { int tem[] = {1,2,3}; AllSort as = new AllSort(); as.temp = tem; as.perm(temp, 0, 2); } }