HJ68 成绩排序(冒泡排序)

image
示例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;
		}
	}
}

结果如下:
image

posted @ 2026-07-02 10:41  Carey_ccl  阅读(7)  评论(0)    收藏  举报