查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。

输入描述:

输入多行,先输入要排序的人的个数,然后输入排序方法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;
    }
}

小样本数据测试下两者运行结果都一样...

posted @ 2020-07-07 21:29  硬盘红了  阅读(155)  评论(0编辑  收藏  举报