排列问题

来源:互联网 发布:上海编程培训机构 编辑:程序博客网 时间:2024/05/01 21:27

算法思想过程:

集合R,r1,r2,r3,...,rn为集合R的元素。

当元素n为1个时,perm(R)=(r),其中r为集合R中唯一的元素;

当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),...,(rn)perm(Rn)组成。

package cn.aaa;

public class perm {
//排序函数

public static void perm(Object list[],int k,int m){   //k为起点,m为终点

              //产生list[k:m]的所有排列

if(k==m){       //只剩下一个元素
for(int i=0;i<=m;i++)
 System.out.print(list[i]);
System.out.println();
}else{     //还有很多个元素,递归产生排列
for(int i=k;i<=m;i++){
swap(list,k,i);
perm(list,k+1,m);  
swap(list,k,i);
}
}
}
//交换函数,交换list中第k个位置与第m个位置的值
public static void swap(Object list[],int k,int m){
Object temp;
temp = list[k];
list[k] = list[m];
list[m] = temp;
}
public static void main(String[] args) {

Object list[] = {1,2,3,4};

                System.out.println("list的所有排列为:");

perm(list,0,list.length-1);

}


}


0 0