JAVA语言实现数组的全排列的代码教程
小标 2018-12-04 来源 : 阅读 1505 评论 0

摘要:本文主要向大家介绍了JAVA语言实现数组的全排列的代码教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言实现数组的全排列的代码教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

一、思路


第一步:将得到的数组从小到大进行排序。Arrays.sort(array);使array变成(例如12345这种顺序)。


————进入死循环


第二步:打印出当前数组(第一次的话应该是12345)。


第三步:从右往左找到第一个逆序的数,记录下标为index(如第一次的话5比4大,所以应该是4,index=3)。若这个数组完全逆序(如已经变成54321这种,即index<=0),则表示已经输出完毕,退出。


第四步:从右往左找到第一个比array[index]大的数,然后交换这个数和index处的数的值。(如5>4,交换5和4,数组成为12354)。这一步是肯定可以找到并完成交换的。


第五步::将array数组的从index+1下标处开始的之后的数进行逆序排序。


————死循环


二、具体实现(Java)


import java.util.Arrays;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

         System.out.println("请输入待排列的数据总个数:");

        Scanner in = new Scanner(System.in);

        int size = in.nextInt();

        int [] daysList = new int [size];

        for(int i =0; i<size;i++){

            System.out.println("请输入第"+(i+1)+"个数:");

            daysList[i]=in.nextInt();

        }

        permute(daysList,0);

    }

 

 

    public static void permute(int[] array,int start){    

        Arrays.sort(array);//先排个序

        int index = 0;

 

        while(true) {

            printArray(array);//输出

            //从右往左寻找第一个逆序

            for(int i = array.length-2;i>=0;i--) {

                if(array[i]<array[i+1]) {

                    index=i;//找到第一个逆序下标

                    break;

                }else if(i<=0) {//若不存在逆序,即到了例如54321这种排列,则说明排列完了

                    return;

                }

            }

            //到这里找到了第一个逆序的下标,应该将这个下标的数字与,从右往左第一个大于该数字的数交换

            for(int i=array.length-1;i>=0;i--) {

                if(array[i]>array[index]) {

                    swap(array,i,index);//交换

                    break;

                }

            }

 

            //接下来将index之后的数据逆序排列

            reverse(array,index+1);

        }

    }  

 

    /**

     * 将输入的数组反过来(逆序)

     * @param array 待逆序的数组

     * @param i 逆序开始的下标(该下标之前的数据不会变)

     */

    public static void reverse(int array[],int i)

    {

        int k=i,j=array.length-1;

        while(k<j)

        {

            swap(array,k,j);

            k++;

            j--;

        }

    }

    /**

     * 交换array[s]和array[i]的数据

     * @param array

     * @param s

     * @param i

     */

    private static void swap(int[] array,int s,int i){  

        int t=array[s];  

        array[s]=array[i];  

        array[i]=t;  

    } 

 

    /**

     * 将array打印出来

     * @param array

     */

    private static void printArray(int[] array) {

        for(int i=0;i<array.length;i++) {

            System.out.print(array[i]);

        } 

        System.out.print("\n");

    }

}

   


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved