int compareInts(const void *a, const void *b) {
int x = *(const int *)a;
int y = *(const int *)b;
return (x > y) - (x < y);
}
void printArray(const char *name, const int arr[], size_t count) {
printf("%s is {", name);
for (size_t i = 0; i < count; i++) {
if (i > 0) {
printf(", ");
}
printf("%d", arr[i]);
}
printf("}\n");
}
int numbers[] = {1, 3, 2, 1, 3};
size_t count = sizeof numbers / sizeof numbers[0];
//C has no set: after sorting equal values stand side by side
qsort(numbers, count, sizeof numbers[0], compareInts);
//numbers is {1, 1, 2, 3, 3}
printArray("numbers", numbers, count);
//an element stays if it differs from the last one kept
size_t uniqueCount = 0;
for (size_t i = 0; i < count; i++) {
if (uniqueCount == 0 || numbers[i] != numbers[uniqueCount - 1]) {
numbers[uniqueCount++] = numbers[i];
}
}
//numbers is {1, 2, 3}
printArray("numbers", numbers, uniqueCount);