算法生成列表的所有可能的排列?

说我有一个n元素的列表,我知道有n!可能的方式来订购这些元素。什么是一个算法来生成此列表的所有可能的顺序?例如,我有列表[a,b,c]。该算法将返回[a,b,c],[a,c,b,],[b,a,c],[b,c,a],[c,a,b] , 一个]]。

我在这里读
http://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations

但维基百科从来没有擅长解释。我不太明白。

最佳答案
基本上,对于从左到右的每个项目,生成剩余项目的所有排列(并且每个添加有当前元素)。这可以递归地(或者迭代地,如果你喜欢疼痛),直到到达最后一个项目,在那一点只有一个可能的顺序。

所以使用列表[1,2,3,4]生成所有以1开头的排列,然后所有排列以2开始,然后3开始,然后4开始。

这有效地减少了从将四个项目的列表的排列找到三个项目的列表中的一个的问题。减少到2,然后减少1个项目列表,将找到所有的。
使用3个彩色球的过程排列的示例:
Red, green and blue coloured balls ordered permutations image(从https://en.wikipedia.org/wiki/Permutation#/media/File:Permutations_RGB.svghttps://commons.wikimedia.org/wiki/File:Permutations_RGB.svg)

转载注明原文:算法生成列表的所有可能的排列? - 代码日志