题解 | #成绩排序#
成绩排序
http://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。
示例: jack 70 peter 96 Tom 70 smith 67
从高到低 成绩 peter 96 jack 70 Tom 70 smith 67
从低到高
smith 67
jack 70 Tom 70 peter 96 输入描述: 注意一个case里面有多组样例,请用循环处理输入 输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。 输出描述: 按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开 示例1 输入:
3 0 fang 90 yang 50 ning 70
输出:
fang 90 ning 70 yang 50
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student{
char name[10];
int score;
}stu;
int main(){
stu st[1000],t;
int i,j,n,flag;
while(scanf("%d %d",&n,&flag)!=EOF){
for(i=0;i<n;i++)
scanf("%s %d",&st[i].name,&st[i].score);
if(flag==1)
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(st[j].score>st[j+1].score){
t=st[j];
st[j]=st[j+1];//大的放后
st[j+1]=t;//往后冒泡,每次找个最大的放最后
}
if(flag==0)
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(st[j].score<st[j+1].score){
t=st[j];
st[j]=st[j+1];
st[j+1]=t;//0降序,每趟找一个最小的
}
for(i=0;i<n;i++)
printf("%s %d\n",st[i].name,st[i].score);
}
return 0;
}
冒泡排序,升序每次循环找最大。 for(i=0;i<n;i++)for(j=0;j<n-i-1;j++)每一次i的外层一趟循环确定这趟最后一个数