问题描述:
给定一组记录n(n<100)小明各个时期的考试成绩,格式为日期+成绩,中间以空格隔开,记录之间
现要求以分数为关键字从大到小对其进行排序,若分数相同按日期从小到大排序
输入样例:
4
2017/1/1 95
2017/6/10 85
2017/3/2 95
2017/1/1 65
输出样例:
2017/1/1 95
2017/3/2 95
2017/6/10 85
2017/1/1 65
#include<stdio.h>
typedef struct node{
char date[10];
int score;
}Record;
int main(void){
int n;
int i,j;
scanf("%d",&n);
Record array[n];
Record temp;
for(i=0;i<n;i++){
scanf("%s%d",&array[i].date,&array[i].score);
}
//排序
for(i=1;i<n;i++){
for(j=i;j>0&&array[j].score>=array[j-1].score;j--){
if(array[j].score>array[j-1].score || strcmp(array[j].date,array[j-1].date)<0){ //分数大向前移动
temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
}
}
for(i=0;i<n;i++){
printf("%s %d\n",array[i].date,array[i].score);
}
return 0;
}
//strcmp (str1,str2) 相等时返回0 str1<str2返回负数 str1>str2返回正数