算法一:
#include<stdio.h>
void swap(int *a, int *b) {
int m = *a;
*a = *b;
*b = m;
}
void perm(int a[], int k, int m) {
if(k>m) {
for (int i=0; i<=m;i++) {
printf("%d",a[i]);
}
printf("\n");
}
else {
for (int i=k;i<=m;i++) {
swap(a+k,a+i);
perm(a,k+1,m);
swap(a+k,a+i);
}
}
}
int main() {
int a[5] = {1,2,3,4,5};
perm(a,0,4);
}
算法二:利用stl中的next_permutation函数
#include<stdio.h>
#include<algorithm>
using namespace std;
int main() {
int a[5] = {1,2,3,4,5};
do {
for(int i=0;i<5;i++) {
printf("%d",a[i]);
}
printf("\n");
}while(next_permutation(a,a+5));
return 0;
}
算法区别在于 算法二的输出是从小到大输出的