《数据结构(C语言版)》学习笔记:递归的全排列产生算法(p8)
1. 算法C语言实现
|
|
2. 为什么会有2次交换数据
第一次交换是为了将list[i]设置为排列首元素,第二次交换是为了恢复第一次交换之前的状态,以保证循环依次遍历不同元素。
以序列{a, b, c, d}为例,循环并交换list[i]与list[begin],使a,b,c,d依次为首元素;
以a为首元素,list[0]与list[0]交换,顺序不变;
以b为首元素,list[1]与list[0]交换,顺序变为{b,a,c,d},第一个元素选定之后,对{a,c,d}递归执行全排列,执行完成之后,下一次循环之前,需要将list[1]与list[0]再次交换,以恢复到{a, b, c, d}的顺序,这样,下次循环,再交换list[2]与list[0],才能使得字符c为首元素;
同理可以分析以c和d为首元素的情况。
3. 测试主函数
|
|
