How to sort an array of structures in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// A simple structure representing a person
struct Person {
    char name[32];
    int age;
};

// Comparator function: sort by age (ascending)
int compareByAge(const void *a, const void *b) {
    const struct Person *pa = (const struct Person *)a;
    const struct Person *pb = (const struct Person *)b;
    
    return pa->age - pb->age;
}

// Comparator function: sort by name (lexicographically)
int compareByName(const void *a, const void *b) {
    const struct Person *pa = (const struct Person *)a;
    const struct Person *pb = (const struct Person *)b;
    
    return strcmp(pa->name, pb->name);
}

int main() {
    struct Person people[] = {
        {"Emma", 32},
        {"Sophia", 25},
        {"Ellison", 29},
        {"Lyra", 23}
    };

    size_t count = sizeof(people) / sizeof(people[0]);

    // Sort by age
    qsort(people, count, sizeof(struct Person), compareByAge);

    printf("Sorted by age:\n");
    for (size_t i = 0; i < count; i++) {
        printf("%s (%d)\n", people[i].name, people[i].age);
    }

    // Sort by name
    qsort(people, count, sizeof(struct Person), compareByName);

    printf("\nSorted by name:\n");
    for (size_t i = 0; i < count; i++) {
        printf("%s (%d)\n", people[i].name, people[i].age);
    }

    return 0;
}



/*
run:

Sorted by age:
Lyra (23)
Sophia (25)
Ellison (29)
Emma (32)

Sorted by name:
Ellison (29)
Emma (32)
Lyra (23)
Sophia (25)

*/

 



answered May 8 by avibootz

Related questions

1 answer 172 views
1 answer 164 views
1 answer 174 views
1 answer 177 views
177 views asked Jun 9, 2015 by avibootz
...