Java 二维数组元素降序排序(非冒泡排序)
说明:每次比较出最大值后,把最大值设置为最小值-1,再次比较该数组;
创建Object b[][] = new Object[N][2];来存储String和Int两种类型数据到同一个数组里
package com.MyJava;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("输入学生人数:");
String Num = scan.next();
int N = Integer.parseInt(Num);
// 创建Object类型二维数组并赋值
Object[][] a = new Object[N][2];
int max = 0, min = 0;
String maxName = null;
for (int i = 0; i < N; i++) {
System.out.println("输入第" + (i + 1) + "个学生的姓名:");
String Name = scan.next();
a[i][0] = Name;
System.out.println("输入第" + (i + 1) + "学生人数的成绩:");
int Score = scan.nextInt();
a[i][1] = Score;
// 把第一个输入成绩赋值给min,只需要赋值一次!
if (i == 0) {
min = (int) a[0][1];
}
// 计算最小值
if ((int) a[i][1] < min) {
min = (int) a[i][1];
}
}
// 计算最大值并依次输出
Object b[][] = new Object[N][2];
System.out.println("成绩由高到低的排序为:");
for (int i = 0; i < N; i++) {
int j = 0;
// 循环计算最大值
for (j = 0; j < N; j++) {
if ((int) a[j][1] > max) {
max = (int) a[j][1];
maxName = (String) a[j][0];
}
}
System.out.println("姓名:" + maxName + ";成绩:" + max);
// 找到最大值,并设为最小值,下次循环就能找到更小的值
for (j = 0; j < N; j++) {
if ((int) a[j][1] == max) { // 找到最大值对应的位置j
a[j][1] = min-1; // 把最大值设为最小值-1
maxName = (String) a[j][0];
max = min-1; // 设置max为最小值-1,用于下次循环比较出最大值
}
}
}
}
}
输入学生人数:
5
输入第1个学生的姓名:
张三
输入第1学生人数的成绩:
66
输入第2个学生的姓名:
李四
输入第2学生人数的成绩:
89
输入第3个学生的姓名:
王二
输入第3学生人数的成绩:
99
输入第4个学生的姓名:
莉莉
输入第4学生人数的成绩:
87
输入第5个学生的姓名:
陈琳
输入第5学生人数的成绩:
74
成绩由高到低的排序为:
姓名:王二;成绩:99
姓名:李四;成绩:89
姓名:莉莉;成绩:87
姓名:陈琳;成绩:74
姓名:张三;成绩:66