全排列

2016-08-13  本文已影响0人  孙睿888

对几个数进行全排列,如1,2,3进行全排列。可以采用递归加循环的方式.
一次排列的结束就输出一次。else中的for循环代表对每一层进行全排列。
i=0 代表对第一层(3个数排列)进行排列 i=1 代表对第二层 (两个数)依次类推。
而交换语句,是每个数都和这层的第一个数交换,确保所有的数都能在前面。
package test;
import java.util.Scanner;
public class quanpailie
{
public static void perm(int a,int asum[],int k)
//a数字的个数 k+1从哪个数开始排列
{
if(k==asum.length-1) //一次排列结束 输出 个数满足依次排列
{
for(int i=0;i<asum.length;i++)
System.out.print(asum[i]+"\t");
System.out.println();
}
else
{
for(int i=k;i<a;i++)//i值非常重要
{
swap(asum,k,i);
perm(a,asum,k+1);
swap(asum,k,i);
}
}
}
public static void swap(int asum[],int a,int b)//不加数组无法进行交换
{
int temp;
temp=asum[a];
asum[a]=asum[b];
asum[b]=temp;
}
public static void main(String[] args)
{
System.out.println("请输入你的数字个数");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
System.out.println("请输入你的数字");
int asum[]=new int[a];
for(int i=0;i<asum.length;i++)
{
asum[i]=sc.nextInt();
}
int k=0;
perm(a,asum,k);
//a代表数的个数 asum 代表这些数 k+1代表从第几个开始排序
}
}

上一篇下一篇

猜你喜欢

热点阅读