zoukankan      html  css  js  c++  java
  • 学生排序,使用三层优先级

    描述:

     有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
    每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
    样例输入:  
    3 
    zhao 19 90 
    qian 20 90 
    sun 19 100 
    样例输出 
    qian 20 90 
    zhao 19 90 
    sun 19 100 

    分析:

    方法一:先按成绩冒泡排序,再按名字冒泡排序,再按年龄冒泡排序
    方法二:以成绩为排序要点,在该冒泡排序内,如果成绩相等,等判断名字,如果连名字都相等,就判断年龄,按要求调换位置

    代码:

    代码一:
    class student():    #创建学生类
         def inputInfo(self,st):
             lis=list(st)
             self.name=lis[0]
             self.age=int(lis[1])
             self.grade=int(lis[2])
         def getName(self):
             return self.name
         def getAge(self):
             return self.age
         def getGrade(self):
             return self.grade
    
     n=int(input())    #输入部分
     students=[]
     while n:
         n-=1
         st=student()
         st.inputInfo(input().split())
         students.append(st)
    
     for j in range(len(students)-1):    #根据成绩排序,忽略成绩相等的情况
         for i in range(len(students)-1-j):
             if students[i].getGrade()>students[i+1].getGrade():
                 students[i],students[i+1]=students[i+1],students[i]
    
     for j in range(len(students)-1):    #遍历找到成绩相等的情况,按姓名排序
         for i in range(len(students)-1-j):
             if students[i].getGrade()==students[i+1].getGrade():
                 if students[i].getName()>students[i+1].getName():
                     students[i],students[i+1]=students[i+1],students[i]
    
     for j in range(len(students)-1):    #遍历找到成绩名字都相等的情况,按年龄排序
         for i in range(len(students)-1-j):
             if students[i].getGrade()==students[i+1].getGrade():
                 if students[i].getName()==students[i+1].getName():
                     if students[i].getAge()>students[i+1].getAge():
                         students[i],students[i+1]=students[i+1],students[i]
    
     for i in students:    #输出
         print(i.getName(),i.getAge(),i.getGrade(),sep=' ')
    
    代码二:
    class student():    #创建学生类
         def inputInfo(self,st):
             lis=list(st.split())
             self.name=lis[0]
             self.age=int(lis[1])
             self.grade=int(lis[2])
         def getName(self):
             return self.name
         def getAge(self):
             return self.age
         def getGrade(self):
             return self.grade
    
     students=[]    #输入部分
     n=int(input())
     while n:
         n-=1
         st=student()
         st.inputInfo(input())
         students.append(st)
    
     for i in range(len(students)-1):
         for j in range(len(students)-1-i):    #按成绩排序
             if students[j].getGrade()>students[j+1].getGrade():
                 students[j],students[j+1]=students[j+1],students[j]
             elif students[j].getGrade()==students[j+1].getGrade():#当过程中遇到成绩相等的时候,按名字排序
                 if students[j].getName()>students[j+1].getName():
                     students[j],students[j+1]=students[j+1],students[j]
                 elif students[j].getName()==students[j+1].getName():#当成绩名字相等,按年龄排序
                     if students[j].getAge()>students[j+1].getAge():
                         students[j],students[j+1]=students[j+1],students[j]
    
     for i in students:    #输出
         print(i.getName(),i.getAge(),i.getGrade(),sep=' ')
  • 相关阅读:
    mac c++编译出现segmentation fault :11错误
    ssh 连接缓慢解决方法
    237. Delete Node in a Linked List
    203. Remove Linked List Elements
    Inversion of Control Containers and the Dependency Injection pattern
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    SxsTrace
    使用CCleaner卸载chrome
    decimal and double ToString problem
  • 原文地址:https://www.cnblogs.com/thgpddl/p/12368459.html
Copyright © 2011-2022 走看看