`

经典全排列算法

阅读更多

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种
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics