算法 | 全排列问题(图文详解)

article/2025/10/14 7:39:40

目录

一.全排列的定义

1.什么是全排列

2.例子

二.code

三.分析


一.全排列的定义

1.什么是全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

2.例子

假设现在有一个数组ar如下

ar[3]={1,2,3};

那么这个数组的全排列就是

1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 2 1 
3 1 2 

二.code

#include<stdio.h>void Swap(int& a, int& b)/*交换函数,将a和b的值互换*/
{int c = a;a = b;b = c;
}void Perm(int* br, int k, int m)/*br代表要进行全排列的数组,k~m代表这个数组中要进行全排列数字的范围*/
{if (k == m){for (int i = 0; i <= m; ++i){printf("%d ", br[i]);}printf("\n");}else{for (int j = k; j <= m; ++j){Swap(br[j], br[k]);Perm(br, k + 1, m);Swap(br[j], br[k]);}}
}int main()
{int ar[] = { 1,2,3 };int n = sizeof(ar) / sizeof(ar[0]);Perm(ar, 0, n - 1);return 0;
}

三.分析

(1)

ar代表要进行全排列的数组,k指向这个数组的开始位置,即0号下标。m指向这个数组的末尾位置,即2号下标。

首先进入Perm函数后,先判断k是否等于m,这里k=0,m=2,不相等。接着将k的值赋给j,进入for循环后,首先执行交换函数,将ar[k]和ar[j]的值互换。接着再递归调用Perm函数,这时k的值向后移动一格。

进入新的Perm函数后,k!=m,继续接着将k的值赋给j,进入for循环后,首先执行交换函数,将ar[k]和ar[j]的值互换。接着再递归调用Perm函数,这时k的值向后移动一格。

进入新的Perm函数后,此时k==m,所以执行打印语句,即此时全排列的第一个数据为 1,2,3。

注:

这里的 (1)(2)分表代表执行语句

Swap(br[j], br[k]);
Perm(br, k + 1, m);

(2)

打印完1,2,3后,此时递归函数开始回退,及执行(3)。接着执行for循环中的 j++,此时 j==m。首先执行交换函数,将ar[k]和ar[j]的值互换。接着再递归调用Perm函数,这时k的值向后移动一格。此时k==m,所以执行打印语句,即此时全排列的第二个数据为 1,3,2。

注:

(3)代表执行语句

Swap(br[j], br[k]);

执行完这一步后,就让递归函数Perm完成了“归”。

(3)

接着从 ar = {1,3,2} 这里开始执行(3),回到ar = {1,2,3}这里。此时 j == m,退出for循环,所以从 ar = {1,2,3} 这里继续执行(3),回退到第一个Perm函数中。

(4)

此时第一个Perm函数中 ar 的 j进行++操作,接着在执行(1)(2),调用了一个新的Perm函数,且此时 ar数组 k位置和j位置的数互换。此时 ar = {2,1,3}。进入Perm函数后,k !=m,进入for循环,将 k的值赋给 j。接着在执行(1)(2)。

执行完(1)(2)后ar = {2,1,3},且此时 k == m,所以执行打印语句,即此时全排列的第三个数据为 2,1,3。

(5)

(6)

(7)

(8)

(9)

(10)


http://chatgpt.dhexx.cn/article/5VT2qsF9.shtml

相关文章

全排列算法思路解析

1.全排列的定义和公式&#xff1a; 从n个数中选取m&#xff08;m<n&#xff09;个数按照一定的顺序进行排成一个列&#xff0c;叫作从n个元素中取m个元素的一个排列。由排列的定义&#xff0c;显然不同的顺序是一个不同的排列。从n个元素中取m个元素的所有排列的个数&#…

全排列算法

全排列的概念 排列 从n个数中选取m&#xff08;m<n&#xff09;个数按照一定的顺序进行排成一个列&#xff0c;叫作从n个元素中取m个元素的一个排列。不同的顺序是一个不同的排列。从n个元素中取m个元素的所有排列的个数&#xff0c;称为排列数&#xff08;几种排法&#…

激活JRebel

生成新的 GUID 将生成的GUID 粘贴到此处 https://jrebel.qekang.com/ 如&#xff1a; https://jrebel.qekang.com/cf0c9d95-c31f-4e75-bc5a-146291b8bb71

JRebelXRebel的配置和使用(进阶篇)

JRebel&XRebel的配置和使用 嘚吧嘚设置JRebel快捷键XRebel使用 嘚吧嘚 之前简单介绍了JRebel&XRebel的安装和使用&#xff0c;不了解的朋友可以补补课哈&#x1f606;。 JRebel&XRebel这款插件不仅仅可以用来热部署&#xff0c;所以继续分享一下这款插件的相关使…

IDEA热部署JRebel插件激活教程

JRebel简介 JRebel是一款实现热部署的开发工具&#xff0c;它可以允许你在启动程序时修改java代码直接进行编译生效&#xff0c;无须手动重启。热部署的实现会为你节省了大量重启时间&#xff0c;明显提高个人开发效率。 安装JReable 同其它插件安装一样&#xff0c;请按照以…

Idea热部署插件JRebel+XRebel

1、下载地址&#xff1a;https://plugins.jetbrains.com/plugin/4441-jrebel-and-xrebel/versions 保险起见这里建议下载2022.4.1版本&#xff0c;否则容易出现JRebel LS client not configured的问题&#xff0c;如果你已经出现了&#xff0c;可以参考 https://blog.csdn.ne…

JRebel 热部署

前言 Jrebel 可快速实现热部署&#xff0c;节省了大量重启时间&#xff0c;提高了个人开发效率。 IDEA上原生是不支持热部署的&#xff0c;一般更新了 Java 文件后要手动重启 Tomcat 服务器&#xff0c;才能生效&#xff0c;浪费时间浪费生命&#xff0c;目前对于idea热部署最…

IDEA热部署插件JRebel使用

JRebel安装与激活 JRebel 使用 此时已经安装好并已激活&#xff0c;我们使用 JRebel debug的时候&#xff0c;修改代码&#xff0c;不能实现热部署&#xff0c;因此还需要设置其他地方 1.项目自动编译 设置 compiler.automake.allow.when.app.running ctrlshiftA 或者 help->…

IDEA插件-热部署:JRebel

一、摘要 springboot项目开发过程中通常修改了某分部代码需要重启服务才能生效。通过JRebel插件可以实现热部署&#xff0c;避免了频繁重启服务。 JRebel是一套JavaEE开发工具。 Jrebel 可快速实现热部署&#xff0c;节省了大量重启时间&#xff0c;提高了个人开发效率。 二、…

Jrebel安装使用教程 及 Jrebel 4.2版本激活失效的处理(超简洁明了)

写在前面&#xff1a;不小心更新了Jrebel插件导致插件用不了qwq&#xff0c;经过查阅多方面的资料总结出了解决这个问题的方法&#xff0c;现分享给大家~ &#xff08;如果原本没安装JRebel插件请直接从第三步开始看~&#xff09; 第一步&#xff1a;删除4.2版本 先在Plugins…

JRebel插件热部署快速入门教程

文章目录 引入插件安装插件激活打开激活窗口激活插件 插件使用设置项目热更新热更新说明演示热更新 引入 视频讲解JRebel安装、使用、部署 Jrebel能够非常方便的帮助我们进行项目的热更新&#xff0c;尤其是前端也嵌在后端工程中的单体项目&#xff0c;热更新能减少一半的开发…

JRebel插件使用详解

JRebel插件安装与使用图文教程 JRebel是一款JVM插件&#xff0c;它使得Java代码修改后不用重启系统&#xff0c;立即生效。IDEA上原生是不支持热部署的&#xff0c;一般更新了 Java 文件后要手动重启 Tomcat 服务器&#xff0c;才能生效&#xff0c;浪费时间浪费生命。 目前对…

javaweb开发,提高效率利器——JRebel

JRebel用了有一段时间了&#xff0c;发现确实好用&#xff0c;节省了很多不必要的时间&#xff0c;提高了开发效率。在这里记录一下他的安装和使用过程&#xff0c;希望能帮助到有需要的人。 官网&#xff1a;https://www.jrebel.com/ 一、JRebel简介 jrebel是国外公司perfo…

JRebel 和 XRebel 激活

1&#xff1a;JRebel 和 XRebel的作用 JRebel&#xff1a;修改完代码&#xff0c;不想重启服务&#xff0c;就使想代码生效。 XRebel&#xff1a;请求中&#xff0c;各个部分代码性能监控。例如&#xff1a;方法执行时间&#xff0c;出现的异常&#xff0c;SQL执行时间&#x…

JRebel安装、最新激活方式

安装JRebel 1、在IDEA中一次点击 File->Settings->Plugins->Brows Repositories 2、在搜索框中输入JRebel进行搜索 3、找到JRebel for intellij 4、install 5、安装好之后需要restart IDEA 激活JRebel 生成 GUID 的网址 https://www.guidgen.com/用这个网址 生成的…

Jrebel激活

一般一个产品的生命周期就像一个抛物线。JRebel 亦是如此。 做 Java 开发&#xff0c;离不开热发布、热部署。JRebel 就是一套 JavaEE 开发工具 JRebel 可快速实现热部署&#xff0c;节省了大量重启时间&#xff0c;提高了个人开发效率。 JRebel 是一款 JAVA 虚拟机插件&…

idea使用JRebel插件详解

简介 JRebel是一套JavaEE开发工具。 Jrebel 可快速实现热部署&#xff0c;节省了大量重启时间&#xff0c;提高了个人开发效率。 JRebel是一款JAVA虚拟机插件&#xff0c;它使得JAVA程序员能在不进行重部署的情况下&#xff0c;即时看到代码的改变对一个应用程序带来的影响。JR…

Idea之热部署插件JRebel+XRebel

文章目录 Idea之热部署插件JRebelXRebel1. devtools热部署1. 使用流程2. 缺点 2. Jrebel and XRebel for IntelliJ1. 安装2. 激活JRebel-方式一3. 激活JRebel方式二4. 使用JRebel5. 使用XRebel Idea之热部署插件JRebelXRebel 热部署&#xff1a;就是在修改代码之后&#xff0c…

JRebel 热部署插件的安装使用

文章目录 Jrebel简介JRebel的安装和使用idea安装JRebelJRebel的使用 JRebel的Activation Jrebel简介 当你修改doGet&#xff0c;doPost等一些内容时&#xff0c;你再次访问&#xff0c;访问到的内容不变&#xff0c;除非重启或重新加载class文件。   用Jrebel 可快速实现热部…

idea之热部署插件jrebel的使用

背景 一个java web项目&#xff0c;在写的过程中我们需要不断调试&#xff0c;如果没有热部署&#xff0c;则我们每修改一次项目要重启一次&#xff0c;验证问题有没有得到解决。如果项目很小&#xff0c;启动只要几秒或十几秒&#xff0c;可能感觉影响不是很大&#xff1b;但当…