1028. List Sorting

来源:互联网 发布:网络电话卡怎么使用 编辑:程序博客网 时间:2024/06/04 23:22
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct stu {  int id;  char name[9];  int grade;}stu;int comp1(const void*a, const void*b);int comp2(const void*a, const void*b);int comp3(const void*a, const void*b);int main(){  stu data[100000];  int n, c, i;  scanf("%d %d",&n,&c);  for (i = 0; i < n; i++)    scanf("%d %s %d", &data[i].id, data[i].name, &data[i].grade);  if (c == 1)    qsort(data, n, sizeof(stu), comp1);  if (c == 2)    qsort(data, n, sizeof(stu), comp2);  if (c == 3)    qsort(data, n, sizeof(stu), comp3);  for (i = 0; i < n; i++)    printf("%06d %s %d\n", data[i].id, data[i].name, data[i].grade);    return 0;}int comp1(const void*a, const void*b){  return (*(stu*)a).id - (*(stu*)b).id;}int comp2(const void*a, const void*b){  if(!strcmp((*(stu*)a).name, (*(stu*)b).name))    return (*(stu*)a).id - (*(stu*)b).id;  else return strcmp((*(stu*)a).name, (*(stu*)b).name);}int comp3(const void*a, const void*b){  if((*(stu*)a).grade== (*(stu*)b).grade)    return (*(stu*)a).id - (*(stu*)b).id;  else return (*(stu*)a).grade - (*(stu*)b).grade;}

0 0