c++ Perm递归全排列函数

程序源码

#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 位进行全排列,将排列的每一组数都输出。
  • 1
  • 2

第一次循环:

这里写图片描述

第二次循环:

这里写图片描述

【例】:对数组的后三位进行全排列。主函数如下所示:

int main(){
    int arr[6]={1,2,3,4,5,6};
    Perm(arr,6,3);
    system("pause");
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

【结果】:

这里写图片描述

结论:

【时间复杂度】:O(n!)
Perm函数是一个递归函数,它的作用是对数组的后size-N 位进行全排列,缺点是时间复杂度高。

猜你喜欢

转载自blog.csdn.net/hi_baymax/article/details/82426394