学习笔记 c++ (递归算法--全排列)
给你一个数组,你把这个数组里的数的所有排列方式写列出来。
input {1,2,3}
output{1,2,3},{1,3,2},{2,3,1}......
结果 :
代码:
#include <iostream>
using namespace std;
void swap(char *q, char *p)
{
//交换函数
int temp;
temp = *q;
*q = *p;
*p = temp;
}
void perm(char arr[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
{
//递归结束出口,当数列只剩下一个数的时候输出
cout<<arr[i]<<" ";
}
cout<<endl;
}
else
{
for(i = k; i <=m; i++)
{
//递归部分
swap(arr[k],arr[i]);
perm(arr,k+1,m);
/*把数组看成1{234}+2{134}+3{124}+4{123}
再把{234}看成2{34}+3{24}+4{23}
一直把整体化为部分,一直把大问题分解成小问题。*/
swap(arr[k],arr[i]);
}
}
}
int main()
{
char arr[] = "123456";
perm(arr, 0 , 5);
return 0;
}