字典序排序-Java

字典序排序求全排列


import java.util.Arrays;

/**
 * @author 毛毛虫
 * @create 2020-09-24 10:40
 */
public class dictionaryOrder {
    void swap(int arr[],int a,int b){
        int temp = 0;
        temp = arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
    }
    //全排列
    void Prim(int arr[],int n){
        int num =1;
        int a=0;
        int b=0;
       for (int i=n;i>0;i--){//计算有多少种情况,就循环多少次
           num*=i;
       }
       while(num-->0){
           for (int i=0;i<n;i++){//打印情况
               System.out.print(arr[i]);
           }
           System.out.println();
           for (int i=n-1;i>0;i--){//从右往左,找出第一个左边小于右边的数,设置为arr[a]
               if (arr[i-1]<arr[i]){
                   a=i-1;
                   break;
               }
           }
           for (int j=n-1;j>a;j--){//从右往左,找出第一个大于arr[a]的数,设为arr[b]
               if (arr[j]>arr[a]){
                   b=j;
                   break;
               }
           }
           swap(arr,a,b); //交换arr[a],arr[b]
           Arrays.sort(arr,a+1,n); //将arr[a]后面的数据,由小到大排序
       }
    }

    public static void main(String[] args) {
        int arr[]={2,1,3,4};
        Arrays.sort(arr);//首先得将要排序的数组从小到大就行排序
        dictionaryOrder dictionaryOrder = new dictionaryOrder();
        dictionaryOrder.Prim(arr,4);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值