生成1~n 的排序!!!

来源:互联网 发布:mac怎么设置开机密码 编辑:程序博客网 时间:2024/06/06 03:04

问题描述 :

                 输入一个数字n,按照字典序大小顺序输出前n个数的所有排序。


例如 :3

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1


首先我想有感而发,通过这个题我又进一步的了解了递归的伟大。


解题思路 :

如果是第一次做这样的题,我可真是毫无头绪,根本没有想过会使用递归这样的算法,每一次的遍历,每一次的

递归实在是让我感到递归算法的有趣之处。


首先按照我理解的思想,他的样子就像是一个树型递归,什么是树型递归,其实这个名字是我给他起的,

如果我输入一个数字n,代表这这个排序(1~n) 的,前n个数字都在变化位置,最后排好位置之后就进行输出,

如果相成一个树,在树根的时候,第一个位置到最后一个位置什么数字都不放,这个根节点在分出n个叶节点,

每一个叶节点第一个位置依次放入(1~n)之间的数字,就相当于任何数字都在第一个位置上排过序,之后是之拥有

第一个位置数字的节点分出他的叶节点,这回的叶节点就是n-1个,为什么是n-1个呢?由于你在排序的位置中已经

占有了一个位置,所以你剩下了n-1 个数字放入这个排序的第二个位置,依次下去,直到最后这个排序中全部排完

就可以把他们依次的输出了,这样整个排序都会出现在屏幕上,但是这样你有没有想过,第一次有n个节点,这n个

节点中的每一个节点有可以分出n-1个节点,之后每一个n-1个节点中的每一个节点又会分出n-2个节点,这样的空间

实在是太庞大了,使用递归的话,会浪费大量的空间的,但是这样的方法还是会完美的解出这个题的。。。。。。





0 0
原创粉丝点击