全排列递归算法
以A B C 的全排列来举例子。
- A 后面紧跟着 剩下两个元素(B C)的全排列
- B 后面紧跟着 剩下两个元素(A C)的全排列
- C 后面紧跟着 剩下两个元素(B A)的全排列
从上面可以看出就是拿第一个依次后面的每个元素交换,得到了3种状态。
然后我们以 (B C)的全排列继续演示:
4. B后面紧跟着 剩下一个元素( C)的全排列
5. C后面紧跟着 剩下两个元素(B )的全排列
然后我们以 (A C)的全排列继续演示:
6. A后面紧跟着 剩下一个元素( C)的全排列
7. C后面紧跟着 剩下一个元素( A)的全排列
然后我们以 (B A)的全排列继续演示:
8. B后面紧跟着 剩下一个元素( A)的全排列
9. A后面紧跟着 剩下一个元素( B)的全排列
从这里可以看出 ,我们又把后面两个元素进行了全排列。 最后只剩一个元素,就是一个排序。
所以我们可以让第一个元素与后面的每个元素依次交换,然后对第二位也进行相应交换。
代码如下:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void prem(vector<int>v, int start, int end)
{
if (start == end)
{
for (auto & i : v)
{
cout << i << " ";
}
cout << endl;
}
else
{
for (int i = start; i <= end; i++)
{
swap(v[start], v[i]);
prem(v,start+1, end);
swap(v[start], v[i]);
}
}
}
int main()
{
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
prem(v, 0, 2);
system("pause");
return 0;
}
结果如下