1028. List Sorting

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值