全排列

作者: 孙睿888 | 来源:发表于2016-08-13 15:46 被阅读0次

    对几个数进行全排列,如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代表从第几个开始排序
    }
    }

    相关文章

      网友评论

          本文标题:全排列

          本文链接:https://www.haomeiwen.com/subject/kqzesttx.html