字典序全排列算法研究
递归方法求全排列:
递归方法很容易理解:分别将每个位置交换到最前面位,之后全排列剩下的位。
【例】递归全排列 1 2 3 4 5
1,for循环将每个位置的数据交换到第一位
swap(1,1~5)
2,按相同的方式全排列剩余的位
/// <summary>
/// 递归方式生成全排列的方法
/// </summary>
/// <param name="fromIndex">全排列的起始位置</param>
/// <param name="endIndex">全排列的终止位置</param>
private static void PermutationList(int fromIndex, int endIndex)
{
if (fromIndex == endIndex)
Output();
else
{
for (int index = fromIndex; index <= endIndex; ++index)
{
// 此处排序主要是为了生成字典序全排列,否则递归会打乱字典序
Sort(fromIndex, endIndex);
Swap(fromIndex, index);
PermutationList(fromIndex + 1, endIndex);
Swap(fromIndex, index);
}
}
}
非递归方法(字典序法)