c / intermediate
Snippet
Custom Sorting with qsort and Callbacks
The standard qsort function uses a comparison callback to determine the sort order of any data type.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdlib.h>#include <stdio.h>int compare_desc(const void *a, const void *b) {return (*(int*)b - *(int*)a);}int main() {int data[] = {10, 50, 20, 40, 30};size_t n = sizeof(data) / sizeof(data[0]);qsort(data, n, sizeof(int), compare_desc);for(size_t i = 0; i < n; i++) printf("%d ", data[i]);return 0;}
Breakdown
1
const void *a, const void *b
Generic pointers used by qsort to pass elements to the comparator.
2
*(int*)b - *(int*)a
Subtraction logic that returns positive, zero, or negative for descending order.