https://qna.habr.com/q/1252656
если итоговое расположение элементов не важно, то самым оптимальным решением будет отсортировать массив, а потом профильтровать на месте вот так:
int i, pos = 0;
for (i = 1; i < y; i++) {
if (a[i] != a[pos]) {
a[++pos] = a[i];
}
}
for (i = pos + 1; i < y; i++) {
a[i] = 0;
}
так ты получишь асимптотику O(n * ln(n))