Miałem obliczanie elementów unikalnych w jakimś projekcie. Wyciąłem kod. Masz dla liczb int. Myślę że sobie poradzisz z dostosowaniem :-)
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
int *x = (int *) a;
int *y = (int *) b;
return *x - *y;
}
size_t calcUniqueElements(int *table, size_t table_length) {
if(!table_length) {
return table_length;
}
qsort(table, table_length, sizeof(int), compare);
int * last = table + table_length;
int * first = table;
int * result = table;
while(++table != last) {
if(!(*result == *table) && ++result != table) {
*result = *table;
}
}
return (++result) - first;
}
int main(void) {
int table[] = {5, 1, 2, 5, 4, 5, 3, 4};
size_t table_length = sizeof(table) / sizeof(table[0]);
printf("%zu\n", calcUniqueElements(table, table_length));
return EXIT_SUCCESS;
}