问题描述 :
输入一个数字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个节点,这样的空间
实在是太庞大了,使用递归的话,会浪费大量的空间的,但是这样的方法还是会完美的解出这个题的。。。。。。