/**
* @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;
}
}
分享到:
相关推荐
合并排序递归和非递归算法的实现可以让人理解到递归算法的实现有时候比非递归算法效率高很多,人只需要给出一个递归公式和一个递归出口,所有的事都可以交给计算机来完成了
全排序的递归与非递归算法C++实现 递归的思想如下:perm(p1,p2...pn)=p1perm(p2,p3...pn)+p2perm(p1,p3,p4...pn)+...+pnperm(p1,p2...pn-1)
冒泡排序递归算法
合并排序非递归算法是学习计算机算法与实现的一种应用,可以巩固c语言所学的知识
快速排序算法设计与分析总结 二叉树与树的转换前序、后序的递归、非递归算法,层次序的非递归算法的实现 二叉树与树的转换前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现 实现树与...
用C实现了快速排序的非递归算法. int quickpass ( sqlist &R, int low, int high ) { ... } void quicksort ( sqlist &r, int low, int high ) { ... }
8645 归并排序 (非递归算法).txt
本文对经典的堆排序非递归算法进行了详细的分析,并用JAVA实现。用过该问题的JAVA实现,可使学习者清晰的观测到解决该问题的全过程。
c++实现的合并排序算法 用递归和非递归两种方式实现的
用函数实现归并排序(非递归算法),并输出每趟排序的结果 Input 第一行:键盘输入待排序关键的个数n 第二行:输入n个待排序关键字,用空格分隔数据 Output 每行输出每趟排序的结果,数据之间用一个空格分隔 Sample...
合并排序的递归调用和合并排序的非递归调用的对比,可以让人感受到选择递归调用可以提高工作作业效率,只要得到递归公式和递归出口就可以了,问题解决起来会很省力
快速排序一般用的是递归算法,利用系统的提供的栈结构,而此非递归算法没有利用栈,巧妙完成了排序,并提供人机交互界面
Java数组排序总结(冒泡_选择_插入_希尔)__递归算法的复杂度,实用
这个是在vc6.0下利用递归算法实现的基数排序算法的程序,注释很详细,方便初学者读
自己写的4个Java代码,内有详细注释,适合想学... insertion_sort.java --插入排序 Divide.java --分治排序 HanoiCompute.java --递归实现汉诺塔 FileCtrl.java --递归实现显示目录下的所有文件和文件夹
在双向链表上实现快速排序的递归算法 输入的形式:元素个数、元素都为整型。 输入值范围:元素个数为非负正整数,需要排序的元素都为整型。 输出的形式:排序前的元素序列和排序后的元素序列。 程序的功能:对用户...
算法实验报告 排序 递归 分治 动态规划
插入排序递归非递归汇编写法 内含详细注释
用递归方式实现,在VC中调试正常,执行效率不高,却可以使用。
实验一、冒泡排序算法和递归算法.doc