一组数据的全排列——分治法
一、思想——全排列
依次将待排列的数组的后n-1个元素分别与与第一个元素交换,则每次递归处理的都是后n-1个元素的全排列。当数组元素仅有一个e为此递归算法的出口。
也就是说交换的步骤是这样的:
(1)第一个数与第一个数交换,然后对第一个数后面的所有数进行排列。当对后面的数进行排列的时候,将这组数据中的第一个数与第一个数交换.....这样一直交换下去,当只剩一个数据的时候输出,即第一次得到的结果就是原数组
(2)整个数组中的第二个数与第一个数进行交换,对交换后得到的数组中从第二个数开始再进行第(1)步
(3)这次就是第三个数与第一个数交换....
(4)依次这样交换下去,但是要注意的是在每次交换后得出一组排序结构之后,都要再将数据交换回去,变成原数组,再进行下一轮的交换
二、图形表示 :(如果上面的解释看不懂,就直接看图),图也是根据自己的理解画的,有什么问题请记得留言哈
第一个数与第一个数交换
第二个数据与第一个数据进行交换
第三个数与第一个数进行交换
三、代码展示:
template<class Type>
void perm(Type list[], int k, int m) // m是数组最后一个元素的下标
{if(k == m){for(int i=0; i<=m; i++){cout<<list[i]<<" ";}cout<<endl;}else{for(int i=k; i<=m; i++){swap(list[k],list[i]);int j = k+1;perm(list, j, m);swap(list[k],list[i]);}}
}
请注意,当我们每次将后面的数与第一个数交换后一定要记得将这组数据再交换变回原来的样子,每次后面的数与第一个数在交换的时候都是在原数据的基础上交换的
一组数据的全排列——分治法相关推荐
- 大数据处理基本思想——分治法
分治法--"分而治之" 众所周知,计算机计算速度非常快而被人们加以使用,但计算速度再快的计算机,处理数据的能力也有一定限度,所以在处理大数据操作的时候,采用分治法可以有效的处理目前 ...
- 程序员的算法课(13)-分治法
一.什么是分治 [百度百科]分治法((Divide and Conquer))可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后 ...
- 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)
代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g 提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...
- 分治法查找数组元素的最大值和最小值(python实现)
实验内容 给定任意几组数据,利用分治法的思想,找出数组中的最大值和最小值并输出 实验原理 利用分治法,将一个数组元素大于 2 的数组分成两个子数组,然后对每一个子数组递归调用,直到最小的子数组的元素个 ...
- 分治法 第2关:求一组数据的和
任务描述 本关任务:利用分治法求一组数据的和. 编程要求 请在右侧编辑器Begin-End处补充代码,完成本关任务,注意需要学生自己获取输入数据再进行操作. 测试说明 平台会对你编写的代码进行测试,比 ...
- 分治法 第1关:求一组数据中最大的两个数
任务描述 本关任务:利用分治法求一组数据中最大的两个数和最小的两个数. 编程要求 请在右侧编辑器Begin-End处补充代码,完成本关任务. 测试说明 平台会对你编写的代码进行测试,比对你输出的数值与 ...
- java 分治法排序_分治法实现1-N的数字按字典序全排列组合 Java语言
package 分治法; import java.util.Arrays; /* * 将数字 1 - n进行全排列 按字典序从小到大输出 * 如 1 - 3 * 123 132 213 231 312 ...
- mysql求数值分位点_如何计算一组数据中任意一个数值的分位值?
本篇补充,关于评论区@慢中取利 的提问. 分析:你的疑问是 想要逆推 算出percentile()方法的k值,也就是分位值对应的百分数. 逆推,最好的办法我认为是 找到Excel 关于percenti ...
- 计算一组数据平均值、最大值、最小值 (12 分)
7-1 计算一组数据平均值.最大值.最小值 (12 分) 本题目要求读入一组数据,输出其平均值.最大值.最小值. 输入格式: 输入在一行中若干空格间隔的整数. 输出格式: 对每一组输入,在一行中以空格 ...
最新文章
- linux常见操作命令及相关延伸
- 【收藏】Win10自带的邮件客户端配置腾讯企业邮箱账号详解
- AI in RTC 创新挑战赛,决赛打响
- 大众点评账号业务高可用进阶之路
- 云开发听说过没? Compilr 屌爆的在线开发工具 -_-#
- 添加ejs后页面空白解决办法
- input回车触发事件_JavaScript学习笔记(十五)—Event事件(上)
- RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践
- HTML5截取视频第一帧作为预览图片
- C++入门经典-例3.9-使用嵌套表达式判断一个数是否是3和5的整数倍
- uni-app加载中,加载结束
- 微信公众号发送客服消息-中文乱码
- 悲剧!广电总局12月11日将封闭的网站目录!!!
- Linux——例行性工作排程
- 202. 快乐数 (Python 实现)
- Python学习笔记(10)——舆情数据评分系统搭建
- 广和通实现基于5G R16模组的FWA Open CPU方案技术突破
- OSPF虚链接的基本配置
- Android备考01 黑马76期-day03 操作数据库
- 为什么餐厅老是没人光临?快试试全息投影餐厅