递归生成n个元素的所有排列方式

原创 2005年04月24日 19:47:00

通常我们希望检查n个不同元素的所有排列方式以确定一个最佳的排列。比如,a,b,c的排列方式有: abc, acb, bac, bca, cab和cba. N个元素的排列方式共有n!种。

//生成list[k:m]的所有排列方式
void Perm(char list[], int k, int m)
{
 int i;
 if(k==m)
 {
  for(i=0;i<=m;i++)
  {
   printf("%c", list[i]);
   printf("/n");
  }
 }
 else
 {
  for(i=k;i<=m;i++)
  {
   swap(list+k, list+i);
   Perm(list, k+1, m);
   swap(list+k, list+i);
  }
 }
}

Ref:<<数据结构,算法与应用>> P7~P8

n个元素的全排列(非递归+去重)

非递归采用的方法是:字典排序找后继;该方法自带去重的效果,并且效率高、顺序自然。 以3个数字的全排列为例,共有 3! = 6 种排列,这6种排列是有大小的,如果按从小到大排列,示意如下: 123 ...

n个元素的全排列(递归+去重)

排列组合是算法常用的基本工具,如何在c语言中实现排列组合呢?思路如下:本文主要探讨递归实现,由于递归将问题逐级分解,因此相对比较容易理解,但是需要消耗大量的栈空间,如果线程栈空间不够,那么就运行不下去...

蓝桥杯常用算法知识点:【递归】求n个元素的全排列

package com.aiqiongdiao; public class Main { /** * 【递归】求n个元素的全排列 * abc acb bac bca cab cba *...

C使用递归实现前N个元素的和

递归函数,也就是不断的调用自身的函数,使用递归能够比较方便的解决一些比较难使用循环解决的问题。就在这个例子中,求一个数组a[]的前n项和,也就是求a[n-1]+a[n-2]+…+a[0],那么如果一个...

【算法-分治】从数组中取出n个元素的所有组合(需要深入理解递归)

本文为转载,原文章出处http://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html 如数组为{1, 2, 3, 4, 5, 6},那...

非递归求n个元素的所有子集

题目描述:给出一个n个元素的集合,要求打印出所有的子集; 思路分析:n个元素的子集共有2^n个,其中包括空集。  (1)假设有3个元素{a, b, c},那么此时有 2^3 个子集,即8个子集。  (...
  • sen7747
  • sen7747
  • 2017年07月24日 21:52
  • 119

从数组中取出n个元素的所有组合(递归实现)

Link:http://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html 从数组中取出n个元素的所有组合(递归实现)...

从数组中取出n个元素的所有组合(递归实现)

从数组中取出n个元素的所有组合(递归实现)

《数据结构、算法与应用》5.(递归输出n个元素的所有子集)

最近在读《数据结构、算法与应用》这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还...
  • oktears
  • oktears
  • 2014年04月13日 17:41
  • 1829

【算法】快速排序算法(递归实现 从小到大排列) 排序范围(0~n-1) n为数组元素个数

今天就来谈谈快速排序,我们也不详谈快速排序的时间复杂度,我们重点来分析一下快速排序的思想。   快速排序的思想十分简单,假设给定一个无序的数组,我们要从小到大排列,我们只需要完成以下几步    1、选...
  • mgsky1
  • mgsky1
  • 2017年06月28日 11:14
  • 506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归生成n个元素的所有排列方式
举报原因:
原因补充:

(最多只允许输入30个字)