Perm--全排列函数

来源:互联网 发布:淘宝网乌梢蛇木瓜丸 编辑:程序博客网 时间:2024/06/05 12:00

代码如下:

void Perm(int* arr,int size,int N){ if(size == N) {   for(size_t i=0;i<size;++i)   cout<<arr[i];   cout<<endl; } else {   for(size_t i=N;i<size;++i)   {   std::swap(arr[i],arr[N]);   Perm(arr,size,N+1);   std::swap(arr[i],arr[N]);   } }}
详细解释:

例如传入arr 数组为12345

(1)Perm(arr,5,3):表示arr数组的下标为3的开始全排列,即45全排列。

 结果如下:

                 

具体的递归过程如下:


(2)Perm(arr,5,2):表示arr的后3位全排列。

  结果如下:

                  

具体递归调用过程如下:

 

(3)Perm(arr,5,0):表示arr数组全排列。此处验证省略。可自行验证。

时间复杂度为:N+N*(N-1)+N*(N-1)(N-2)+...........+1

                约等于    O(N!)

0 0
原创粉丝点击