输出两个数字间全部数字的全排列

package com.wy;

import java.util.Arrays;
/**
 * 获得数据全排列的一个实现算法
 *
 *
 */
public class QuanPaiLie {
      /**
       * 递归输出所有的排列
       * @param array
       * @param begin
       * @param end
       */
      public static void getAllOrder( int[] array, int begin, int end){
             if (begin == end) {
                   check(array);
            } else{
                   for( int i = begin; i <= end; i++){ //数组中的每一个元素挨个当第一个
                         // 交换数据
                         swap(array,begin, i); // 交换首元素和第i个元素
                         getAllOrder(array, begin + 1, end); //递归调用begin + 1, end
                         swap(array,i, begin); // 交换元素i和首元素
                  }
                  
            }
      }
      
      /**
       * 交换数组中的两个元素
       * @param array
       * @param from
       * @param to
       */
      public static void swap(int[] array, int from, int to){
             // 防止无效交换的情况,
             // 比如位置相同,或者两个位置的数据相同
             if(from == to){
                   return;
            }
             int tmp = array[from];
            array[from] = array[to];
            array[to] = tmp;
      }
      
      /**
       * 输出数组中的元素
       * @param array
       */
      public static void check(int[] array){
            System. out.println(Arrays. toString(array));
      }
      
      /**
       * 获得m,n之间所有的数,并以矩阵的形式返回
       * @param m
       * @param n
       * @return
       */
      public static int[] initArray( int m, int n){
             if(n<m){
                  System. out.println( "error input!");
            }
             int[] arr = new int[n-m];
             for( int i = m; i < n; i++){
                  arr[i-m] = i;
                   //System.out.print(i-m+"*"+i+" ");
            }
             //System.out.println();
             return arr;
      }
      public static void main(String[] args){
             int[] array = initArray(31,36);
             getAllOrder(array,0,array.length -1);

      }
}
 
运行结果:
[31, 32, 33, 34]
[31, 32, 34, 33]
[31, 33, 32, 34]
[31, 33, 34, 32]
[31, 34, 33, 32]
[31, 34, 32, 33]
[32, 31, 33, 34]
[32, 31, 34, 33]
[32, 33, 31, 34]
[32, 33, 34, 31]
[32, 34, 33, 31]
[32, 34, 31, 33]
[33, 32, 31, 34]
[33, 32, 34, 31]
[33, 31, 32, 34]
[33, 31, 34, 32]
[33, 34, 31, 32]
[33, 34, 32, 31]
[34, 32, 33, 31]
[34, 32, 31, 33]
[34, 33, 32, 31]
[34, 33, 31, 32]
[34, 31, 33, 32]
[34, 31, 32, 33]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值