17.依据身高体重次序排序
身高从低到高,身高相同体重从轻到重,体重相同维持原来顺序。
输入
4
100 100 120 130
40 30 60 50
输出:
2 1 3 4
输入
3
90 110 90
45 60 45
输出
1 3 2
查看代码
import java.util.*;
public class Demo17 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
String[] high = sc.nextLine().split(" ");
String[] weigh = sc.nextLine().split(" ");
//身高、体重、序号三个变量的处理
int[][] ints = new int[n][3];
for(int i = 0; i < n; i++){ //好好理解二维数组,从一维到二维,行列角度
ints[i][0] = i + 1;
ints[i][1] = Integer.parseInt(high[i]);
ints[i][2] = Integer.parseInt(weigh[i]);
}
Arrays.sort(ints, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[1] == o2[1])
return o1[2] -o2[2];
else
return o1[1] - o2[1];
}
});
for(int[] i : ints){
System.out.print(i[0] + " ");
}
}
}
思考:为什么在定义二维数组时,不是 int[][] ints = new int[3][n]?
在排序时,(int[] o1, int[] o2) 其中的o1 o2存储的数据有哪些?
本质上还是一维,只不过相对于普通一维中存储的是基本类型,这里存储的数组类型,==》形成二维。