查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入
3 0 fang 90 yang 50 ning 70
输出
fang 90 ning 70 yang 50
思路1:
放到List集合中,利用集合的sort()方法排序,利用lambda表达式调用compare方法分别得到升序和降序
思路2:
建立一个学生类保存姓名和成绩
一个学生类型的数组进行数据的读取
写一个标识符sortNum等于0降序、等于1升序,两种情况调用选择排序方法
推荐使用思路1,思路2写出来的OJ通不过,搞不清楚状况
思路1代码:
import java.util.*; public class Homework1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); //输入学生的数量 int flag = sc.nextInt(); //选择使用升序排列还是降序 //把学生放到一个集合中 对集合排序 遍历输出集合 List<student> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add(new student(sc.next(), sc.nextInt())); //添加学生姓名和成绩 } if (flag == 0) { //降序 list.sort(((o1, o2) -> o2.score - o1.score)); } else if (flag == 1) { list.sort((o1, o2) -> o1.score - o2.score); } for (student s : list) { System.out.println(s.name + " " + s.score); } } } } class student{ String name; int score; public student(String name, int score){ this.name = name; this.score = score; } }
思路2代码:
import java.util.Scanner; public class Homework1_2 { static int num; //学生数量 static int sortNum; //排序方法 static Student[] students; public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { num = sc.nextInt(); //学生数量 sortNum = sc.nextInt(); //选择排序方法 students = new Student[num]; for (int i = 0; i < num; i++) { students[i] = new Student(); students[i].name = sc.next(); students[i].score = sc.nextInt(); } if (sortNum == 0) { //降序 selectionSort(students, 0); }else if (sortNum == 1){ selectionSort(students,1); } for (int i = 0;i<num;i++){ System.out.println(students[i].name+" "+students[i].score); } } } public static void selectionSort(Student[] students, int sortNum) { for (int i = 0; i < students.length; i++) { int index = i; for (int j = i + 1; j < students.length; j++) { if (sortNum == 0) { //降序 index = students[j].score > students[index].score ? j : index; } if (sortNum == 1) { //升序 index = students[j].score < students[index].score ? j : index; } } swap(students, i, index); } } public static void swap(Student[] students, int i, int j) { Student temp = students[i]; students[i] = students[j]; students[j]= temp; } } class Student { public String name; public int score; public Student() { } public Student(String name, int score) { this.name = name; this.score = score; } }
小样本数据测试下两者运行结果都一样...
学习的博客多用于在笔记中,防止笔记过于臃肿,所以将样例及运行结果放在博客中,后以超链接的形式记录在笔记中,所以有些博文过于单薄。如果有小伙伴遇到问题欢迎评论,看到就会回复,学渣一枚,加油努力。