HJ68 成绩排序(冒泡排序)

示例1:
输入:
3
0
fang 90
yang 50
ning 70
输出:
fang 90
ning 70
yang 50
说明:
在这个样例中,op=0,因此按成绩降序排序。
示例2:
输入:
4
1
fang 90
yang 50
ning 70
yang 70
输出:
yang 50
ning 70
yang 70
fang 90
说明:
在这个样例中,op=1,因此按成绩升序排序。
答案如下:
import java.util.Scanner;
//本题采用冒泡排序
public class AnswerMA {
public static void main(String[] args) {
Node[] nodeArr = null;
int sortType = -1;
Scanner sc = new Scanner(System.in);
//采集输入数据
while (sc.hasNext()) {
int number = Integer.parseInt(sc.nextLine());
sortType = Integer.parseInt(sc.nextLine());
nodeArr = new Node[number];
for (int i = 0; i < number; i++) {
String line = sc.nextLine();
String[] s = line.split(" ");
nodeArr[i] = new Node(s[0], Integer.parseInt(s[1]));
}
}
//sortType == 1时采用正序冒泡排序,冒泡排序具有稳定性
if (sortType != -1 && sortType == 1 && nodeArr != null && nodeArr.length > 0) {
for (int i = nodeArr.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (nodeArr[j].score > nodeArr[j + 1].score) {
Node temp = nodeArr[j];
nodeArr[j] = nodeArr[j + 1];
nodeArr[j + 1] = temp;
}
}
}
}
//sortType == 0时采用倒序冒泡排序,冒泡排序具有稳定性
if (sortType != -1 && sortType == 0 && nodeArr != null && nodeArr.length > 0) {
for (int i = nodeArr.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (nodeArr[j].score < nodeArr[j + 1].score) {
Node temp = nodeArr[j];
nodeArr[j] = nodeArr[j + 1];
nodeArr[j + 1] = temp;
}
}
}
}
//输出数据
if (nodeArr != null && nodeArr.length > 0) {
for (Node node : nodeArr) {
System.out.print(node.name + " ");
System.out.print(node.score);
System.out.println();
}
}
}
//封装每一行的数据中的姓名和成绩
public static class Node {
String name;
int score;
public Node(String name, int score) {
this.name = name;
this.score = score;
}
}
}
结果如下:


浙公网安备 33010602011771号