21xrx.com
2024-12-27 11:44:00 Friday
登录
文章检索 我的文章 写文章
C++递归实现全排列的代码
2023-06-26 07:53:46 深夜i     --     --
C++ 递归 全排列 实现 代码

全排列是指将一组数据按照一定的顺序进行排列,使得每个数据都能够出现恰好一次且顺序不同的一种排列方法。在C++中,可以使用递归实现全排列的算法。以下是C++递归实现全排列的代码。


#include<iostream>

using namespace std;

void Swap(int& a, int& b)   //定义交换函数

  int temp = a;

  a = b;

  b = temp;

void Permutation(int a[], int start, int end)   //定义递归函数

{

  if (start == end)   //当start等于end时,输出排列结果

  {

    for (int i = 0; i < end; i++)

    {

      cout << a[i] << " ";

    }

    cout << endl;

  }

  else

  {

    for (int i = start; i < end; i++)   //循环交换

    {

      Swap(a[start], a[i]);

      Permutation(a, start + 1, end);

      Swap(a[start], a[i]);   //恢复数组

    }

  }

}

int main()

{

  int a[] = 3;

  int n = sizeof(a) / sizeof(a[0]);

  Permutation(a, 0, n);   //传入起始下标和数组长度

  return 0;

}

在这个程序中,我们定义了一个Swap函数来交换两个数的值。接着,我们定义了一个递归函数Permutation,传入数组a、起始下标start和结束下标end,用来得到数组元素的所有排列可能性。当start等于end时,递归结束并输出排列结果。当start小于end时,通过循环将数组的第start个元素和第i个元素交换位置,然后递归调用Permutation函数来确定剩余元素的排列,最后再恢复数组。

在主函数中,我们声明了一个整数数组a并初始化,计算了数组的长度,并传入Permutation函数的起始下标和数组长度。程序运行结果得到了全部的排列可能性。

总结

C++递归实现全排列的算法比较简单易懂,但当数据量较大时,其运行效率较低,需要进行优化。如果需要提高算法的效率,建议使用非递归算法等其他算法来实现全排列。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复