题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=1
C语言源码:
#include<stdio.h>
#include<string.h>
typedef struct student
{
char name[100];
int age,score;
}student;
void quicksort(student stu[],int add[],int low,int high)
{
int i,j,key,x;
i=low;
j=high;
x=add[low];
key=stu[add[low]].age;
while(i<j)
{
while(i<j&&stu[add[j]].age>=key)
j--;
*(add+i)=*(add+j);
while(i<j&&stu[add[i]].age<=key)
i++;
*(add+j)=*(add+i);
}
*(add+i)=x;
if(i-low>1)
quicksort(stu,add,low,i-1);
if(high-i>1)
quicksort(stu,add,i+1,high);
}
int main()
{
int n,add[1000],i,j,t;
student stu[1000];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
getchar();
scanf("%s %d %d",stu[i].name,&stu[i].age,&stu[i].score);
add[i]=i;
}
quicksort(stu,add,0,n-1);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(strcmp(stu[add[j]].name,stu[add[j+1]].name)>0)
{
t=add[j];
add[j]=add[j+1];
add[j+1]=t;
}
}
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(stu[add[j]].score>stu[add[j+1]].score)
{
t=add[j];
add[j]=add[j+1];
add[j+1]=t;
}
}
}
for(i=0;i<n;i++)
printf("%s %d %d\n",stu[add[i]].name,stu[add[i]].age,stu[add[i]].score);
}
}