数据结构->排序

用习惯了sort

突然要写个排序 边界都忘了咋写了。。。

给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:

按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;按名次列出每个学生的姓名与分数。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100 /*参加排序元素的最大个数*/
typedef struct list
{
    char name[20];
    double  score;
} STU;
STU r[MAXSIZE+1];

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        getchar();
        int i,j;
        STU c;

        for(int i=0; i<n; i++)
            scanf("%s %lf",r[i].name,&r[i].score);
        for( i=0; i<n; i++)
            for(j=i+1; j<n; j++)
            {
                if(r[i].score<r[j].score)
                {
                    // swap(r[i],r[j]);
                    strcpy(c.name,r[i].name);
                    strcpy(r[i].name,r[j].name);
                    strcpy(r[j].name,c.name);
                    c.score=r[i].score;
                    r[i].score=r[j].score;
                    r[j].score=c.score;
                }
            }
        int rank,t=0;
        rank=1;
        printf("姓名         成绩\t名次\n");
        printf("%-10s %-5.2lf\t  %d\n",r[0].name,r[0].score,rank);
        for(int i=1; i<n; i++)
            if(r[i].score==r[i-1].score)
            {
                int x=0;
                if(i>=2&&r[i].score==r[i-2].score)
                {
                    x++;
                    printf("%-10s %-5.2lf\t  %d\n",r[i].name,r[i].score,rank+t-x);
                }
                else
                    printf("%-10s %-5.2lf\t  %d\n",r[i].name,r[i].score,rank+t);
                t++;
            }
            else
                printf("%-10s %-5.2lf\t  %d\n",r[i].name,r[i].score,++rank+t);
    }

    return 0;
}
/*
10
Asdf 100
hhjd 65
fdfl 53
ldfjdlf 65
sdflkdl 95
lsdjfld 53
fdsjl 32
kldjfl 100
dklfdsf 85
lkdfds  53
*/


 
 



猜你喜欢

转载自blog.csdn.net/yangdelu855/article/details/78927505