Загрузка [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

printРабочее место участника

printЗадачи

2607. Сортировка по группам

Ограничения: время – 250ms/500ms, память – 128MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Функция быстрой сортировки имеет прототип

void qsort( void *ptr, size_t count, size_t size,
            int (*comp)(const void *, const void *) );

Первый аргумент функции - адрес массива, далее количество элементов массиве и размер одного элемента. Последним аргументом является указатель на функцию, которой передаются адреса двух элементов массива для сравнения. Функция сравнения должна вернуть 0 в случае равенства элементов, отрицательное число, если первый элемент меньше второго, иначе положительное число.

Функция для сравнения строк имеет следующий прототип

int strcmp( const char *lhs, const char *rhs);

Функция сравнения должна вернуть 0 в случае равенства элементов, отрицательное число, если первый элемент меньше второго, иначе положительное число.

Напишите функцию сравнения для сортировки массива структур, содержащих следующую информацию о студентах:

typedef struct student {
  char name[50]; // фамилия
  int group; // номер группы
} student;

Сортировка должна выполняться сначала по номеру группы, а при совпадении группы – по фамилии с помощью strcmp.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct student {
  char name[50]; // фамилия
  int group; // номер группы
} student;
int studcmp(const void *st1, const void *st2){
...
}
int main()
{ student list[1000];
  int n;
  scanf("%d",&n);
  for(int i=0;i<n;++i) {
    scanf("%49s %d",list[i].name,list[i].group);
  }
  qsort(list,n,sizeof(student),studcmp);
  for(int i=0;i<n;++i)
    printf("%d %s\n",list[i].group,list[i].name);
}

В качестве решения необходимо отправить только операторы, которые нужно подставить в определение функции studcmp.

loading