Отсортировать записи в массиве по алфавиту - C (СИ)
Формулировка задачи:
Нужно отсортировать записи в массиве по алфавиту. Записать в виде функции.
void sort(WORKER* mas, int);//Функция для сортировки массива по алфавиту
Решение задачи: «Отсортировать записи в массиве по алфавиту»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char name_t[32];
typedef double money_t;
typedef struct WORKER {
name_t name;
money_t salary;
} worker_t;
void dump(const worker_t * workers, size_t count) {
while ( count-- ) {
printf("%s\t$%.02f\n", workers->name, workers->salary);
++workers;
}
}
int name_cmp(const void * a, const void * b) {
return strcmp(((worker_t*)a)->name, ((worker_t*)b)->name);
}
#define elements_count(arr) ( sizeof(arr) / sizeof(*(arr)) )
int main(void) {
worker_t workers[] = {
{ "Petrov", 1200.0 },
{ "Sidorov", 1000.0 },
{ "Ivanov", 900.0 }
};
qsort(workers, elements_count(workers), sizeof(worker_t), name_cmp);
dump(workers, elements_count(workers));
return 0;
}
Объяснение кода листинга программы
В данном коде происходит сортировка массива структур типа WORKER по алфавиту на языке C.
Код объявляет три типа данных:
- name_t - массив символов для хранения имени работника (до 32 символов).
- money_t - тип данных для хранения зарплаты работника (число с плавающей точкой).
- worker_t - структура, объединяющая в себе два поля: имя работника (name_t) и его зарплата (money_t). Далее определены две функции:
- dump - выводит на экран информацию о работниках в заданном массиве в формате
Имя\tЗарплата\n. - name_cmp - функция сравнения, используемая для сортировки массива. Сравнивает поля
nameструктур worker_t. В функции main создается массив структур worker_t с тремя элементами. Затем, с помощью функции qsort, этот массив сортируется по алфавиту (с использованием функции name_cmp) и выводится на экран с помощью функции dump. Код работает корректно при условии, что все указанные типы данных и функции были правильно определены и работают правильно.