题意:求出一个序列通过交换元素实现升序的最小交换次数。
题解:按部就班地求次数即可,从第一个位置开始,每次通过交换直到该位置被放上应该放上的元素,如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<length;i++){
array[i] = scan.nextInt();
}
Integer[] target = array.clone();
Arrays.sort(target,new Comparator<Integer>(){
@Override
public int compare(Integer o1,Integer o2){
if(o1>o2){
return 1;
}
if(o1<o2