程序源码:
#include<stdio.h>
#include<Windows.h>
#include<iostream>
using namespace std;
void Perm(int* array, int size, int N)
{
if(N == size) {
for(int i = 0; i < size; ++i){
cout<<array[i] ;
}
cout<<endl;
}
else
{
for(int i = N; i < size; ++i){
swap(array[i], array[N]);
Perm(array, size, N+1);
swap(array[i], array[N]);
}
}
}
int main(){
int arr[5]={1,2,3,4,5};
Perm(arr,5,3);
system("pause");
return 0;
}
程序运行结果:
【程序分析】:
从下图的分析中我们可以看出,Perm函数的功能是将传递过来的数组的后size - N 位进行全排列,将排列的每一组数都输出。
第一次循环:
第二次循环:
【例】:对数组的后三位进行全排列。主函数如下所示:
int main(){
int arr[6]={1,2,3,4,5,6};
Perm(arr,6,3);
system("pause");
return 0;
}
【结果】:
结论:
【时间复杂度】:O(n!)
Perm函数是一个递归函数,它的作用是对数组的后size-N 位进行全排列,缺点是时间复杂度高。