前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单的全排列算法实现

简单的全排列算法实现

作者头像
mzlogin
发布2020-04-14 20:40:10
1.1K0
发布2020-04-14 20:40:10
举报
文章被收录于专栏:闷骚的程序员闷骚的程序员

问题描述

实现一个简单的全排列算法,以整形数组{1,2,3,4,5}为例,假设元素无重复。

问题分析

如果用多层循环来实现,那么……有多少个元素将需要有多少层循环,这样作为实现一个算法的角度来看显然是不可取的。

以 a[] = {1,2,3,4,5}为例,它的全排列是

代码语言:javascript
复制
1 {2,3,4,5}的全排列
2  {1,3,4,5}的全排列
3  {1,2,4,5}的全排列
4  {1,2,3,5}的全排列
5  {1,2,3,4}的全排列

由子数组的全排列得到母数组的全排列结果,可以考虑用递归实现,具体可以设计为将 a 依次变换为

代码语言:javascript
复制
12345
21345
31245
41235
51234

然后分别求它们后四个元素的全排列,依此类推。

简单的 C++ 实现

代码语言:javascript
复制
#include <iostream>
using namespace std;

static int n = 0;

void swapint(int *p, int *q)
{
    int tmp = *p;
    *p = *q;
    *q = tmp;
}

void fullarray(int a[], 
        int iLen,   // 数组长度
        int iStart) // 开始下标
{
    if (iLen == iStart)
    {
        for (int i = 0; i < iLen; ++i)
        {
            cout << a[i] << " ";
        }
        cout << "\n";
        n++;
    }
    else
    {
        for(int j = iStart; j < iLen; ++j)
        {
            swapint(&a[iStart], &a[j]);
            fullarray(a, iLen, iStart + 1);
            swapint(&a[iStart], &a[j]);
        }
    }
}

int main()
{
    int a[] = {1,2,3,4,5};
    fullarray(a, sizeof(a)/sizeof(int), 0);
    cout << "总共" << n << "种" << endl;

    return 0;
}

参考:http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011/11/20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 问题分析
  • 简单的 C++ 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档