假定一个序列[1,2,3]
其全排列是
[1,2,3]
[1,3,2]
[2,1,3]
[2,3,1]
[3,1,2]
[3,2,1]
可知其全排列的大致过程是第一个数加上后面数的全排列,这明显是一个递归的过程!
/*************************************************************************
> File Name: permutation.cpp
> Author:
> Mail:
> Created Time: Mon 14 Jun 2021 01:18:18 AM CST
************************************************************************/
#include<iostream>
using namespace std;
void perm(int*, int, int);
void swap(int*, int, int);
void printArray(int*, int);
void printArray(int A[], int n) {
for (int i = 0; i < n; i++) {
std::cout << A[i] << " ";
}
std::cout << std::endl;
}
void swap(int A[], int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
void perm(int A[], int p, int q) {
if (p == q) {
printArray(A, q+1);
}
else {
for (int i = p; i <= q; i++) {
swap(A, p, i); // 交换,让其居于首部
perm(A, p+1, q); // 向后递归
swap(A, p, i); // 换回来,让下一个用
}
}
}
int main() {
int A[] = {1, 2, 3};
perm(A, 0, 2);
return 0;
}