南大高级算法之备考题——最小交换次数

题意:求出一个序列通过交换元素实现升序的最小交换次数。

题解:按部就班地求次数即可,从第一个位置开始,每次通过交换直到该位置被放上应该放上的元素,如2 5 4 3 1,我们先得到目标序列1 2 3 4 5,对第一个位置的元素2,它应该被放在第二个,所以交换,次数+1,得到5 2 4 3 1,此时判断第一个位置的元素仍然不是应该放上去的元素,所以再交换,得到1 2 4 3 5,对于第一个位置的交换即视为完成,同理,对剩下的位置依次进行判断和交换。

代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
    	Scanner scan = new Scanner(System.in);
		int e_num = scan.nextInt();//测试数
		while(e_num>0){
			int length = scan.nextInt();
			Integer[] array = new Integer[length];
			for(int i=0;i(){
				@Override
				public int compare(Integer o1,Integer o2){
					if(o1>o2){
						return 1;
					}
					if(o1 map = new HashMap<>();
			for(int i=0;i

 

 

 

 

 

 

 

 

 

 

 

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
    	Scanner scan = new Scanner(System.in);
		int e_num = scan.nextInt();//测试数
		while(e_num>0){
			int length = scan.nextInt();
			Integer[] array = new Integer[length];
			for(int i=0;i(){
				@Override
				public int compare(Integer o1,Integer o2){
					if(o1>o2){
						return 1;
					}
					if(o1 map = new HashMap<>();
			for(int i=0;i

 

你可能感兴趣的:(南大高级算法之备考题——最小交换次数)