E - 小鑫の日常系列故事(十)——排名次
Input
输入的第一行为n ( 0 < n <= 50) ;
之后给出 n 行,每行为一个人名和ta所得到的分数。保证没有相同的分数。 人名为英文单词,长度不超过10。
Output
输出为n行,每行一个人名与他的得分。每一行最后没有多余的空格。
具体输出格式见样例。
Sample
Input
3
Dan 10
John 50
Danny 30
Output
John 50
Danny 30
Dan 10
#include<stdio.h>
struct node
{
char name[15];
int point;
}a[55],k;
void kp(int l,int r)
{
int i=l;
int j=r;
k=a[i];
if(i>=j)
return ;
else
{
while(i<j)
{
while(i<j&&a[j].point<k.point)
j--;
a[i]=a[j];
while(i<j&&a[i].point>k.point)
i++;
a[j]=a[i];
}
a[i]=k;
kp(l,i-1);
kp(i+1,r);
}
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s %d",&a[i].name,&a[i].point);
kp(0,n-1);
for(i=0;i<n;i++)
{
if(i==0)
printf("%s %d",a[i].name,a[i].point);
else
printf("\n%s %d",a[i].name,a[i].point);
}
}