全排列算法有很多中实现算法,最简单的递归实现,还有字典排序实现(没太看明白)。下面主要说一下递归实现。
假设求 array = { 1, 2, 3, 4, 5}的全排列,输出依次是1{2,3,4} 2{1 ,3,4} 3{ 1, 2, 4} 4{ 1, 2, 3}
对于{ 2, 3, 4} : 2{ 3, 4} 3{ 2, 4} 4 { 2, 3}
对于{3, 4}: 3 {4} 4{3}
...
示意图如下:

实现代码:
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b =temp;
}
void permutation(int *array, int len, int k)
{
if (k >= len) {
for (int i = 0; i < len; i++) {
cout << array[i] << " ";
}
cout << endl;
return ;
}
for (int i = k; i < len; i++) {
swap(&array[i], &array[k]);
permutation(array, len, k + 1);
swap(&array[i], &array[k]);
}
}
2176

被折叠的 条评论
为什么被折叠?



