`
hwy1782
  • 浏览: 150222 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

全排序问题的递归算法

阅读更多

/** 
 * @author hwy1782@gmail.com 
 * @creation date 2010-7-7 下午10:06:24 
 *
 * 
 * 对于一个序列r={4,3,5…}求全排列?
        递归解法的思路:
 (1)对于一个序列R={4,3,5…},
    它其中的每一个数设为Ri,它的全排列我们设为perm(R).
 (2)对于R的全排列我们可以转化成几个小的问题:
        4开头,{3,5…}的全排列,
        3开头,{4,5…}的全排列,
        5开头,{4,3…}的全排列
        即
 	Perm(R)= {R1Perm(R-R1) , R2Perm(R-R2) , R3Perm(R-R3)......,RnPerm(R-Rn)}
	其核心思想就是:将每个元素放到n个元素组成的队列最前方,
	然后对剩余元素进行全排列,依次递归下去。
     
     比如:
   	a b c
	首先将a放到最前方(跟第一个元素交换),然后排列b c,然后将a放回本
        来位置,结果 a b c; a c b
	其次将b放到最前方(跟第一个元素交换),然后排列a c,然后将b放回
	结果 b a c; b c a
 * 
 */

public class ComputePermutation {
	
	public static void main(String[] args) {
		String str = "abc";
		char[] array = str.toCharArray();
		Perm(array, 0, array.length-1);
//		System.out.println(array.length);
	}

	public static void Perm(char[] array, int start, int end) {
		if(start == end){
			for(int i = 0; i <= end; i++)
				System.out.print(array[i]+" ");
			System.out.println();
		}else{
			for(int i = start; i <= end ; i++){
				exchange(array, start, i);
				Perm(array, start+1, end);
				exchange(array, start, i);
			}
		}
	}
	
	public static void exchange(char[] array, int start, int i){
		char temp = array[start];
		array[start] = array[i];
		array[i] = temp;
	}
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics