学生排序,使用三层优先级
描述:
有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=' ')