1. 程式人生 > >Perm--全排列函式

Perm--全排列函式

程式碼如下:

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!)