经典全排列算法

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种
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值