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

描述:

 有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=' ')
posted @ 2020-01-27 12:04  盐亭的森林  阅读(301)  评论(0编辑  收藏  举报