public class Permutation {
public int count=0; //统计总共排列数
public void permutate(String[] array,int i,int j){ //排列递归算法,排列下标从i--j
if(i>j){ //下标i大于j说明已完成一次排列
count++;
for(int k=0;k<array.length;k++){
System.out.print(array[k]+" ");
}
System.out.println();
}else{ //否则分别将i--j的数据与下标为i的位置交换数据,构成前缀,再全排列i+1---j的
for(int x=i;x<array.length;x++){
swap(array,i,x);
permutate(array,i+1,j);
swap(array,x,i); //一种情况完成,要恢复
}
}
}
public void swap(String[] array,int m,int n){
String t;
t=array[m];
array[m]=array[n];
array[n]=t;
}
public static void main(String[] args){
String[] test = new String[]{"香蕉","梨子","苹果"}; //测试数据
Permutation permutation = new Permutation();
permutation.permutate(test,0,2); //从下标0--2
System.out.println("总共有"+permutation.count+"种");
}
}
运算结果:
香蕉 梨子 苹果
香蕉 苹果 梨子
梨子 香蕉 苹果
梨子 苹果 香蕉
苹果 梨子 香蕉
苹果 香蕉 梨子
总共有6种
public int count=0; //统计总共排列数
public void permutate(String[] array,int i,int j){ //排列递归算法,排列下标从i--j
if(i>j){ //下标i大于j说明已完成一次排列
count++;
for(int k=0;k<array.length;k++){
System.out.print(array[k]+" ");
}
System.out.println();
}else{ //否则分别将i--j的数据与下标为i的位置交换数据,构成前缀,再全排列i+1---j的
for(int x=i;x<array.length;x++){
swap(array,i,x);
permutate(array,i+1,j);
swap(array,x,i); //一种情况完成,要恢复
}
}
}
public void swap(String[] array,int m,int n){
String t;
t=array[m];
array[m]=array[n];
array[n]=t;
}
public static void main(String[] args){
String[] test = new String[]{"香蕉","梨子","苹果"}; //测试数据
Permutation permutation = new Permutation();
permutation.permutate(test,0,2); //从下标0--2
System.out.println("总共有"+permutation.count+"种");
}
}
运算结果:
香蕉 梨子 苹果
香蕉 苹果 梨子
梨子 香蕉 苹果
梨子 苹果 香蕉
苹果 梨子 香蕉
苹果 香蕉 梨子
总共有6种