• 学生排序,使用三层优先级


    描述:

     有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=' ')
  • 相关阅读:
    Atom实例
    订阅基础:RSS、ATOM、FEED、聚合、供稿、合烧与订阅
    XML模式:Dublin Core
    Dublin Core
    海量数据的理想存储方案
    百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite
    用HiveDB横向切分MySQL数据库
    超详细单机版搭建hadoop环境图文解析
    从String.valueOf(null)说起
    js闭包理解
  • 原文地址:https://www.cnblogs.com/thgpddl/p/12368459.html
Copyright © 2020-2023  润新知