首先我想说, 太TM操蛋了, 排序那部分代码一直让我纠结了好久!!!非递归思想, 参考的网上的, 代码是自己写的, 勉强算原创吧!!!
这个算法如果想要获取到单调递增的全排列, 需要先将所给数组排序, 然后再调用part()函数即可!!!
思想如下:
n个数的排列可以从1.2....n开始,至n.n-1....2.1结束。
也就是按数值大小递增的顺序找出每一个排列。
以6个数的排列为例,其初始排列为123456,最后一个排列是654321,
如果当前排列是124653,找它的下一个排列的方法是,从这个序列中
从右至左找第一个左邻小于右邻的数,如果找不到,则所有排列求解
完成,如果找得到则说明排列未完成。本例中将找到46,计4所在的
位置为i,找到后不能直接将46位置互换,而又要从右到左到第一个
比4大的数,本例找到的数是5,其位置计为j,将i与j所在元素交换
125643,然后将i+1至最后一个元素从小到大排序得到125346,这
就是124653的下一个排列,如此下去,直至654321为止。算法结束。
#includ