Сортировка массива структур по одному полю - C (СИ)

Узнай цену своей работы

Формулировка задачи:

как сортировку по выбранному полю реализовать на си, покажите на каком -нибудь примере? пжлста)

Решение задачи: «Сортировка массива структур по одному полю»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct PERSON {
    char * name;
    int height;
    double weight;
}person_t;
 
int name_cmp(const void * a, const void *b){
    return strcmp(((person_t*)a)->name, ((person_t*)b)->name);
}
 
int height_cmp(const void * a, const void *b){
    return ((person_t*)a)->height - ((person_t*)b)->height;
}
 
int weight_cmp(const void * a, const void *b){
    double d = ((person_t*)a)->weight - ((person_t*)b)->weight;
    return ( d < 0.0 ) ? -1 : ( d > 0.0 ) ? 1 : 0;
}
 
#define NUM_PERSONS 3
 
int main(void){
    person_t persons[NUM_PERSONS] = {
        { .name = "Sidorov", .height = 173, .weight = 80.2 },
        { .name = "Petrov", .height = 182, .weight = 75.5 },
        { .name = "Ivanov", .height = 180, .weight = 99.9 }
    };
    int i;
    
    printf("\nUnsorted:\n");
    for ( i = 0; i < NUM_PERSONS; ++i )
        printf("%s\t%d\t%.1f\n", persons[i].name, persons[i].height, persons[i].weight);
    
    qsort(persons, NUM_PERSONS, sizeof(person_t), name_cmp);
    printf("\nSorted by name:\n");
    for ( i = 0; i < NUM_PERSONS; ++i )
        printf("%s\t%d\t%.1f\n", persons[i].name, persons[i].height, persons[i].weight);
        
    qsort(persons, NUM_PERSONS, sizeof(person_t), height_cmp);
    printf("\nSorted by height:\n");
    for ( i = 0; i < NUM_PERSONS; ++i )
        printf("%s\t%d\t%.1f\n", persons[i].name, persons[i].height, persons[i].weight);
    
    qsort(persons, NUM_PERSONS, sizeof(person_t), weight_cmp);
    printf("\nSorted by weight:\n");
    for ( i = 0; i < NUM_PERSONS; ++i )
        printf("%s\t%d\t%.1f\n", persons[i].name, persons[i].height, persons[i].weight);
        
    exit(0);
}

Объяснение кода листинга программы

В данном коде:

  1. Создается структура person_t, которая содержит поля name, height и weight.
  2. Определяются функции сравнения name_cmp, height_cmp и weight_cmp, которые сравнивают поля структуры person_t для сортировки массива.
  3. Объявляется массив persons типа person_t с тремя элементами, инициализированными значениями полей name, height и weight.
  4. Выводится список несортированных данных.
  5. Массив persons сортируется по полю name с помощью функции qsort и выводится отсортированный список.
  6. Массив persons сортируется по полю height с помощью функции qsort и выводится отсортированный список.
  7. Массив persons сортируется по полю weight с помощью функции qsort и выводится отсортированный список.
  8. Программа завершается с помощью функции exit.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы