zoukankan      html  css  js  c++  java
  • 递归分治算法计算全排列

    其实计算全排列本人所知有字典序法,还有一个在组合数学中学到的,忘记了,呵呵。不好意思。大家可以Google一下。
    下面这个例子是我练习递归分治算法的时候设计的,呵呵,大家指针批评。
    /**
     * @author Rollen-Holt
     * 递归分治算法计算全排列
     * */
    
    public class Perm{
    	public static void main(String[] args){
    		int[] data={1,2,3,4};
    		perm(data,0,data.length-1);
    	}
    	/**
    	 * 产生data[start:end]的所有排列
    	 * */
    	public static void perm(int data[],int start,int end){
    		if(start==end){
    			for(int i = 0; i <=end; i++) {
    	            System.out.print(data[i]+" ");
                }
    			System.out.println();
    		}else{
    			//还有多个元素的待排列
    			for(int i=start;i<=end;++i){
    				//先交换顺序
    				int temp=data[start];
    				data[start]=data[i];
    				data[i]=temp;
    				//递归调用
    				perm(data, start+1, end);
    				//在此交换顺序
    				temp=data[start];
    				data[start]=data[i];
    				data[i]=temp;
    			}
    		}
    	}
    }
    

    【运行结果】:

    1 2 3 4

    1 2 4 3

    1 3 2 4

    1 3 4 2

    1 4 3 2

    1 4 2 3

    2 1 3 4

    2 1 4 3

    2 3 1 4

    2 3 4 1

    2 4 3 1

    2 4 1 3

    3 2 1 4

    3 2 4 1

    3 1 2 4

    3 1 4 2

    3 4 1 2

    3 4 2 1

    4 2 3 1

    4 2 1 3

    4 3 2 1

    4 3 1 2

    4 1 3 2

    4 1 2 3

    PS:下面扯一点其他的。本算法中用到了基本数据交换的,但是java的叫我不爽,呵呵。

    /**
     * java中值的交换
     * */
    public class test{
    	public static void main(String[] args){
    	    Integer a=1;
    	    Integer b=2;
    	    swap3(a,b);
    	    System.out.println(a);
    	    System.out.println(b);
        }
    	
    	//这个函数不能实现交换
    	public static void swap1(int a,int b){
    		int temp=a;
    		a=b;
    		b=temp;
    	}
    	//可以利用数组实现交换
    	public static void swap2(int[] a){
    		int temp=a[0];
    		a[0]=a[1];
    		a[1]=temp;
    	}
    	//本打算测试一下自动拆箱和装箱,结果还是不行
    	public static void swap3(Integer a,Integer b){
    		Integer temp=a;
    		a=b;
    		b=temp;
    	}
    	
    	
    }
    

    不知道大家除了建立类,还有其他什么方法交换吗?希望提醒一下,谢谢。


     

  • 相关阅读:
    Python自动发送邮件(可带附件)
    unittest单元测试(测试报告生成)
    unittest编写Web测试用例
    unittest跳过测试和预期失败
    unittest的discover方法使用
    Remote使用出现的问题及解决办法
    汇总篇--学习及练习过程中遇到过的问题
    webdriver--单选、复选及下拉框的定位
    webdriver--定位一组元素+iframe表单切换
    webdriver--设置元素等待
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2155206.html
Copyright © 2011-2022 走看看