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

.minHeight{ min-height: 250px; } @media (min-width: 1025px){ .minHeight{ min-height: 90px; } } .minHeight{ min-height: 250px; } @media (min-width: 1025px){ .minHeight{ min-height: 90px; } }

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对数组进行排序所需的最少交换相关推荐

  1. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. java数组给名字排序_用Java给数组排序

    public class BubbleDemo { public static void main(String[] args) { int arr[]={1,3,5,7,2,4,6,8,9}; bu ...

  3. java array 元素的位置_介绍java中的两种排序工具Arrays和Collections

    java中的排序工具主要是有两个Arrays和Collections.我们一个一个来讲解. 本来写好了每一种方法的测试代码,后来又给删了,因为我觉得如果想要去了解的话,可以直接查看这些常用的即可.因为 ...

  4. java 文件内容排序_在Java中对2个大型文本文件进行排序的最佳方法是什么?

    我正在构建一个简单的 Java应用程序,涉及从csv文件中读取信息. csv文件中的信息以这种形式出现: "ID","Description" "AB ...

  5. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用

    Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...

  6. java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型

    List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组, ...

  7. java 字符数组与字符串_用于字符串和数组的5种简单有效的Java技术

    java 字符数组与字符串 Java通常会排在前五种最流行的编程语言中,因此可以理解. 它是一种通用语言,非常容易学习,因为它是一种高级语言,并且可以满足许多用例. 由于这些原因,Java是一门很棒的 ...

  8. java二次排序_使用java 实现二次排序

    二次排序工具类: import java.io.Serializable; import scala.math.Ordered; /** * @author 作者 E-mail: * @version ...

  9. 保存数组类型数据_「Java」基础12:什么叫数组?

    所谓数组,就是有序的元素序列 ,在数学里面都有讲到这个概念. 那么程序中的数组和数学里的数组又有哪些不同呢? 一.数组的定义与访问 举一个现实生活中的例子: 一个500毫升的杯子,既可以拿来装水,也可 ...

最新文章

  1. 今日计划: 2022-02-15
  2. Flink 读取文本文件,聚合每一行的uid
  3. CentOS 网络设置修改
  4. VC 开机自动启动程序 方法
  5. c语言注释换颜色,C语言实现注释转换
  6. python pandas处理无限值inf
  7. mysql 42
  8. 三次样条插值-轨迹规划
  9. Linux下使用润乾设计器
  10. MATLAB数字图像处理模块在哪,MATLAB在数字图像处理中的应用
  11. matlab怎么设置步长,请教matlab中怎么对变步长的数据进行处理
  12. python列表的“增删改查”(python基础讲解第四天)
  13. Outlook添加新浪邮箱时的配置细节——登录密码
  14. Unity ShaderGraph图片发光效果
  15. Python学习手册(笔记)
  16. 如何在离开计算机后加密锁定,如何对企业电脑硬盘文件进行加密?
  17. java excel 插入新行_复制一行,在多个工作表Excel VBA上插入多个带有粘贴信息的新行...
  18. GO语言与其他语言初步比较
  19. ZOJ1845 Australian Voting
  20. java逗号分隔得字符串去重

热门文章

  1. 控制附件的大小 php,wordpress如何修改默认上传附件限制大小
  2. java线程堆栈_深入JVM剖析Java的线程堆栈
  3. mac wmware 无网络_无线网络中常用的技术名词
  4. 如何恢复osd的auth表中的权限
  5. 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录...
  6. linux常用命令和配置
  7. JConsole的使用手册 JDK1.5(转)
  8. Crazy Drops 3
  9. Javascript高级程序设计第二版第十二章--Event--笔记
  10. java tomcat重启linux_Linux下tomcat重启