【算法】求{1,2,3}序列的全排列,邻里交换法(Java)
代码如下:
javapublic class Main{ static int count; static int a[]= {1,2,3}; public static void main(String[] args) { f(a,0); System.out.println(count); } public static void f(int a[],int step) { if(step==a.length-1) { count++; return; } for(int i=step;i<a.length;i++) { { int x=a[i];//交换 a[i]=a[step]; a[step]=x; } f(a,step+1); { int x=a[i];//还原数据 a[i]=a[step]; a[step]=x; } } } }图解如下:
**执行过程如下:**这段代码实现了对数组
a中元素的全排列,并在count中记录排列的数量。下面是每一步的具体细节:
初始状态:
a[] = {1, 2, 3}count = 0调用
f(a, 0),进入函数f:
a[] = {1, 2, 3}step = 0进入
for循环,i = 0:
- 交换
a[0]和a[0](实际上没有变化)- 进入递归,调用
f(a, 1):
a[] = {1, 2, 3}step = 1进入
for循环,i = 1:
- 交换
a[1]和a[1](实际上没有变化)- 进入递归,调用
f(a, 2):
a[] = {1, 2, 3}step = 2
step == a.length - 1成立,执行count++:
count = 1返回上一层递归,恢复数组
a到初始状态:
a[] = {1, 2, 3}继续
for循环,i = 2:
- 交换
a[2]和a[1],得到a[] = {1, 3, 2}- 进入递归,调用
f(a, 2):
a[] = {1, 3, 2}step = 2
step == a.length - 1成立,执行count++:
count = 2返回上一层递归,恢复数组
a到初始状态:
a[] = {1, 2, 3}返回上一层递归,恢复数组
a到初始状态:
a[] = {1, 2, 3}继续
for循环,i = 1:
- 交换
a[1]和a[0],得到a[] = {2, 1, 3}- 进入递归,调用
f(a, 1):
a[] = {2, 1, 3}step = 1进入
for循环,i = 1:
- 交换
a[1]和a[1](实际上没有变化)- 进入递归,调用
f(a, 2):
a[] = {2, 1, 3}step = 2
step == a.length - 1成立,执行count++:
count = 3返回上一层递归,恢复数组
a到初始状态:
a[] = {2, 1, 3}继续
for循环,i = 2:
- 交换
a[2]和a[1],得到a[] = {2, 3, 1}- 进入递归,调用
f(a, 2):
a[] = {2, 3, 1}step = 2
step == a.length - 1成立,执行count++:
count = 4返回上一层递归,恢复数组
a到初始状态:
a[] = {2, 1, 3}返回上一层递归,恢复数组
a到初始状态:
a[] = {1, 2, 3}继续
for循环,i = 2:
- 交换
a[2]和a[0],得到a[] = {3, 2, 1}- 进入递归,调用
f(a, 1):
a[] = {3, 2, 1}step = 1进入
for循环,i = 1:
- 交换
a[1]和a[1](实际上没有变化)- 进入递归,调用
f(a, 2):
a[] = {3, 2, 1}step = 2
step == a.length - 1成立,执行count++:
count = 5返回上一层递归,恢复数组
a到初始状态:
a[] = {3, 2, 1}继续
for循环,i = 2:
- 交换
a[2]和a[1](实际上没有变化)- 进入递归,调用
f(a, 2):
a[] = {3, 2, 1}step = 2
step == a.length - 1成立,执行count++:
count = 6返回上一层递归,恢复数组
a到初始状态:
a[] = {3, 2, 1}返回上一层递归,恢复数组
a到初始状态:
a[] = {1, 2, 3}返回上一层递归,主函数结束。
最终输出
count的值为6,表示数组[1, 2, 3]
【算法】求{1,2,3}序列的全排列,邻里交换法(Java)
小熊吖吖2024-04-19 14:14
相关推荐
世界哪有真情1 分钟前
使用 Arthas 精准排查 SpringBoot 多模块项目中未使用的类(安全清理无用代码)Coovally AI模型快速验证4 分钟前
检测+跟踪一体化!4.39M参数、8.3W功耗,轻量化模型让无人机在露天矿实时巡检softbangong7 分钟前
816-批量将图片分别转为pdf,文件夹下所有图片转为一个pdf玛卡巴卡ldf8 分钟前
【LeetCode 手撕算法】(矩阵)73-矩阵置零、54-螺旋矩阵(贪吃蛇)、48-旋转图像C^h8 分钟前
RTthread中的内存池理解深藏功yu名8 分钟前
Day25(高阶篇):RAG检索与重排序算法精研|从原理到参数调优,彻底攻克检索瓶颈程序员小寒9 分钟前
JavaScript设计模式(四):发布-订阅模式实现与应用不吃香菜学java9 分钟前
苍穹外卖-新增套餐csbysj202010 分钟前
JSON 语法wangchunting10 分钟前
Spring Boot 概述