用习惯了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
*/