Horje
How to Sort an Array of Structs with qsort in C?

Sorting C arrays of structs becomes important for many kinds of applications and one common library function that may be used for this is qsort. In this article, we will learn how to use qsort() with an array of structs in C.

For Example,

Input: 
struct Person people[] = {{"Person1", 21}, {"Person2", 22}, {"Person3", 20}};
Output: Sorted Array (by age): Person3 20 Person1 21 Person2 22

Sorting Array of Structure in C

To sort an array of structures using qsort(), we will have to provide the custom comparator function that compares the structures based on their member values.

Approach

  • First, define the structure that will be stored in an array.
  • Then, write a comparison function to compare two elements of the array that returns an integer less than, equal to, or greater than zero depending on whether the first argument is less than, equal to, or greater than the second.
  • Finally, use the qsort() and pass the pointer to the array, the number of elements in the array, the size of each element, and a comparison function to sort the array of structs.

C Program to Sort Array of Structure Using qsort

The below example demonstrates how we can sort an array of structs using qsort in C. Here, we are sorting the array based on the age member.

C

// C Program to sort an Array of Structs using qsort
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
// Struct definition
struct Person {
    char name[30];
    int age;
};
  
// Comparison function for qsort
int comparePeople(const void* a, const void* b)
{
    return ((struct Person*)a)->age
           - ((struct Person*)b)->age;
}
  
int main()
{
    // Array of structs
    struct Person people[] = { { "Person1", 21 },
                               { "Person2", 22 },
                               { "Person3", 20 } };
    int numPeople = sizeof(people) / sizeof(people[0]);
  
    // Display original array
    printf("Original Array:\n");
    for (int i = 0; i < numPeople; i++) {
        printf("%s\t%d\n", people[i].name, people[i].age);
    }
  
    // Sorting using qsort
    qsort(people, numPeople, sizeof(struct Person),
          comparePeople);
  
    // Display sorted array
    printf("\nSorted Array (by age):\n");
    for (int i = 0; i < numPeople; i++) {
        printf("%s\t%d\n", people[i].name, people[i].age);
    }
  
    return 0;
}

Output

Original Array:
Person1    21
Person2    22
Person3    20

Sorted Array (by age):
Person3    20
Person1    21
Person2    22

Time Complexity: O(n log n), time complexity of the quicksort algorithm used by qsort().
Auxiliary Space: O(log n)




Reffered: https://www.geeksforgeeks.org


C Language

Related
C Program to Concatenate Two Strings Without Using strcat C Program to Concatenate Two Strings Without Using strcat
How to Declare a Struct Member Inside a Union in C? How to Declare a Struct Member Inside a Union in C?
How to Use bsearch with an Array in C? How to Use bsearch with an Array in C?
How to Initialize a 2D Array in C? How to Initialize a 2D Array in C?
How to Declare a Pointer to a Union in C? How to Declare a Pointer to a Union in C?

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
15