qsort with Comparators
Standard library callbacks.
The Standard qsort
The standard library provides qsort in <stdlib.h>, a generic sort that works on any array type by using a comparator callback.
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void *a, const void *b) {
int x = *(const int *)a;
int y = *(const int *)b;
return (x > y) - (x < y);
}
int main(void) {
int a[] = {3, 1, 2};
qsort(a, 3, sizeof(int), cmp_int);
printf("%d %d %d\n", a[0], a[1], a[2]);
return 0;
}The qsort Signature
qsort(base, count, size, compare) takes the array start, element count, element size, and a comparator.
It is generic because it works with raw bytes plus your comparator.
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(const int*)a - *(const int*)b;
}
int main(void) {
int a[] = {9, 4, 7, 1};
qsort(a, 4, sizeof(int), cmp);
for (int i = 0; i < 4; i++) printf("%d ", a[i]);
printf("\n");
return 0;
}All lessons in this course
- Declaring Function Pointers
- Passing Functions
- qsort with Comparators
- Function Pointer Tables