Получение уникальных значений

Массивы и коллекции / Массивы

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);