题解 | #成绩排序#

成绩排序

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的外层一趟循环确定这趟最后一个数

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务