#include<stdio.h>
#include<conio.h>
#define Max 100
typedef struct
{
char num[10];
char name[10];
int score;
} Student;
typedef struct
{
Student list[Max];
} SeqList;
void Heapadjust(SeqList *L,int low,int high)
{
int i,j;
Student temp;
i=low;
j=2*i;
temp=L->list[i];
for(; j<=high; j*=2)
{
if(j<high&&L->list[j].score<L->list[j+1].score)
j++;
if(temp.score>=L->list[j].score)
break;
else
{
L->list[i]=L->list[j];
i=j;
}
}
L->list[i]=temp;
}
void Heapcreat(SeqList *L,int n)
{
int i;
for(i=n/2; i>0; i--)
{
Heapadjust(L,i,n);
}
}
void Heapsort(SeqList *L,int n)
{
int i;
Student temp;
Heapcreat(L,n);
for(i=n; i>1; i--)
{
temp=L->list[1];
L->list[1]=L->list[i];
L->list[i]=temp;
Heapadjust(L,1,i-1);
}
}
int main()
{
FILE *fp;
SeqList *L;
int n,i=1;
L=(SeqList*)malloc(sizeof(SeqList));
if((fp=fopen("student.txt","r+"))==NULL)
{
getchar();
return 1;
}
fscanf(fp,"%d\n",&n);
while(!feof(fp))
{
fscanf(fp,"%s%s%d\n",L->list[i].num,L->list[i].name,&L->list[i].score);
i++;
}
Heapsort(L,n);
printf("\n");
for(int i=1; i<=n; i++)
{
printf("%s%s%d\n",L->list[i].num,L->list[i].name,L->list[i].score);
}
fclose(fp);
getchar();
getchar();
return 0;
}

