C语言之全排列
小标 2018-07-25 来源 : 阅读 742 评论 0

摘要:本文主要向大家介绍了C语言之全排列,通过具体的内容向大家展示,希望对大家学习C语言有所帮助。

本文主要向大家介绍了C语言之全排列,通过具体的内容向大家展示,希望对大家学习C语言有所帮助。

全排列算法是非常基础的算法,写此篇博客,旨在巩固自己的知识,理清自己的思路,有错误的地方欢迎大家指出。

 

还是辣个栗子:

 

数列 1 2 3 的全排列为:

 

1 2 3

 

1 3 2

 

2 1 3

 

2 3 1

 

3 2 1

 

3 1 2

 

排列数的计算公式为:n!

 

就像是给了n个空格,拿n个数填充,第1个空格有n种填充方法,第2个空格有n-1种填充方法......

 

看下图:

 

 

 

 

1 2 3 4 5 的全排列,第1个空格有5种填充方法,相当于第一个数和后面的5-1个数分别做了一次交换。

 

那么第一个空格的所有情况已经求出来了,同理,在第1个空格的基础上,第2个空格有n-1种填充方法,相当于第2个数和后面的5-2个数分别做了一次交换。

 

所以我们可以先把以1开头的全排列情况全部求出来,再求以2、3、4、5的,在以1开头的前提下,我们再以2开头,层层递归下去,值得注意的是,交换以后我们需要再交换回来;

 

不难理解为何交换回来,如果我们把1和3交换了,不交换回来的话,下一次交换就是3,4交换了,而我们是需要下一次交换1和4的。

 

复制代码

 1 #include<stdio.h>

 2

 3 int arr[]={1,2,3,4,5};

 4

 5 void swap(int a,int b)    //a,b表示数组下标

 6 {

 7     int temp;

 8     temp=arr[a];

 9     arr[a]=arr[b];

10     arr[b]=temp;

11 }

12

13 void Fullsort(int n)

14 {

15     if(n==5)    //输出

16     {

17         int i;

18         for(i=0;i<=4;i++)

19             printf("%d ",arr[i]);

20         printf("\n");

21         return;

22     }

23     

24     int i;

25     for(i=n;i<=4;i++)    //第n个位置的数分别与后面4-n个位置的数(包含本身)交换

26     {

27         swap(n,i);

28         Fullsort(n+1);

29         swap(n,i);    //换回来

30     }

31 }

32

33 int main()

34 {

35     Fullsort(0);

36     return 0;

37 } 

以上就介绍了C/C+的相关知识,希望对C/C+有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程