java对数组进行排序_用Java对数组进行排序所需的最少交换
java对数组进行排序
Problem:
问题:
In this problem, we would have an unordered array with consecutive distinct natural numbers [1,2,3,..n], where n is the size of the array. We have to find the minimum number of swaps required to sort the array in ascending order.
在此问题中,我们将拥有一个具有连续的不同自然数[1,2,3,.. n]的无序数组,其中n是数组的大小。 我们必须找到按升序对数组进行排序所需的最小交换次数 。
Note: Think and try by yourself before looking to the solution...
注意:在寻求解决方案之前,请自己思考并尝试...
Solution:
解:
This problem can be solved easily by observing the actual position of elements and their current position , the actual position of element in sorted array will be the a[cur]-1 (element-1), by tracking the actual position of element if we come back to the current element then there exist a cycle , then count the size of that cycle , the number of swaps will be cycling size-1, do this for all the cycles and add them together.
通过观察元素的实际位置及其当前位置,可以很容易地解决此问题,如果我们跟踪元素的实际位置,则排序数组中元素的实际位置将为a [cur -1 ] ( element-1 )回到当前元素,然后存在一个循环,然后计算该循环的大小 ,交换次数将为循环size-1 ,对所有循环进行此操作并将它们加在一起。
Example:
例:
Let an array: A =[2, 4, 5, 1, 3]
设一个数组:A = [2,4,5,1,3]
There exist two cycles:
Cycle 1: 2 → 4 → 1 → 2
Cycle 2: 5 → 3 → 5
存在两个周期:
周期1:2→4→1→2
周期2:5→3→5
Size of cycle = number of nodes:
Size of cycle 1=3
Size of cycle 2=2
周期大小=节点数:
周期1的大小= 3
周期2 = 2
Number of swaps: (3-1)+(2-1) = 3
掉期数量: (3-1)+(2-1)= 3
Program:
程序:
import java.io.*;
import java.math.*;
import java.util.*;
public class Swap {static int minimumSwaps(int[] arr) {int swap=0;
boolean visited[]=new boolean[arr.length];
for(int i=0;i<arr.length;i++){int j=i,cycle=0;
while(!visited[j]){visited[j]=true;
j=arr[j]-1;
cycle++;
}
if(cycle!=0)
swap+=cycle-1;
}
return swap;
}
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {arr[i] = scanner.nextInt();
}
int res = minimumSwaps(arr);
System.out.println(res);
scanner.close();
}
}
Output
输出量
4
4 3 2 1
2
翻译自: https://www.includehelp.com/java-programs/minimum-swaps-required-to-sort-an-array.aspx
java对数组进行排序
java对数组进行排序_用Java对数组进行排序所需的最少交换相关推荐
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
- java数组给名字排序_用Java给数组排序
public class BubbleDemo { public static void main(String[] args) { int arr[]={1,3,5,7,2,4,6,8,9}; bu ...
- java array 元素的位置_介绍java中的两种排序工具Arrays和Collections
java中的排序工具主要是有两个Arrays和Collections.我们一个一个来讲解. 本来写好了每一种方法的测试代码,后来又给删了,因为我觉得如果想要去了解的话,可以直接查看这些常用的即可.因为 ...
- java 文件内容排序_在Java中对2个大型文本文件进行排序的最佳方法是什么?
我正在构建一个简单的 Java应用程序,涉及从csv文件中读取信息. csv文件中的信息以这种形式出现: "ID","Description" "AB ...
- java数组可扩展_[转载]Java数组扩容算法及Java对它的应用
Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...
- java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型
List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组, ...
- java 字符数组与字符串_用于字符串和数组的5种简单有效的Java技术
java 字符数组与字符串 Java通常会排在前五种最流行的编程语言中,因此可以理解. 它是一种通用语言,非常容易学习,因为它是一种高级语言,并且可以满足许多用例. 由于这些原因,Java是一门很棒的 ...
- java二次排序_使用java 实现二次排序
二次排序工具类: import java.io.Serializable; import scala.math.Ordered; /** * @author 作者 E-mail: * @version ...
- 保存数组类型数据_「Java」基础12:什么叫数组?
所谓数组,就是有序的元素序列 ,在数学里面都有讲到这个概念. 那么程序中的数组和数学里的数组又有哪些不同呢? 一.数组的定义与访问 举一个现实生活中的例子: 一个500毫升的杯子,既可以拿来装水,也可 ...
最新文章
- 今日计划: 2022-02-15
- Flink 读取文本文件,聚合每一行的uid
- CentOS 网络设置修改
- VC 开机自动启动程序 方法
- c语言注释换颜色,C语言实现注释转换
- python pandas处理无限值inf
- mysql 42
- 三次样条插值-轨迹规划
- Linux下使用润乾设计器
- MATLAB数字图像处理模块在哪,MATLAB在数字图像处理中的应用
- matlab怎么设置步长,请教matlab中怎么对变步长的数据进行处理
- python列表的“增删改查”(python基础讲解第四天)
- Outlook添加新浪邮箱时的配置细节——登录密码
- Unity ShaderGraph图片发光效果
- Python学习手册(笔记)
- 如何在离开计算机后加密锁定,如何对企业电脑硬盘文件进行加密?
- java excel 插入新行_复制一行,在多个工作表Excel VBA上插入多个带有粘贴信息的新行...
- GO语言与其他语言初步比较
- ZOJ1845 Australian Voting
- java逗号分隔得字符串去重
热门文章
- 控制附件的大小 php,wordpress如何修改默认上传附件限制大小
- java线程堆栈_深入JVM剖析Java的线程堆栈
- mac wmware 无网络_无线网络中常用的技术名词
- 如何恢复osd的auth表中的权限
- 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录...
- linux常用命令和配置
- JConsole的使用手册 JDK1.5(转)
- Crazy Drops 3
- Javascript高级程序设计第二版第十二章--Event--笔记
- java tomcat重启linux_Linux下tomcat重启