Perm--全排列函式
阿新 • • 發佈:2019-01-07
程式碼如下:
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!)