1 - Ordene o array com o seu bubble sort (na verdade não precisa ordenar antes de fazer o que está citado abaixo)
2 - Percorra o array encontrando as duplicatas e vá contanto quantas ocorrências (das cópias) existem.
3 - Crie um novo array, usando como tamanho o tamanho do array original menos a quantidade de ocorrências.
4 - Por fim, faça o mesmo algoritmo do passo 2. Quando um dado elemento não for uma duplicata vc insere no novo array.
Você vai precisar manter alguns contadores (além dos “contadores” dos laços) para gerenciar o seu algoritmo.
apenas uma segestão, não sei se é a mais eficiente!
Voce pode ordenar o array normalmente depois percorre-lo comparando um elemento com o seguinte, caso seja igual você substitui por algum valor nulo (pode ser NULL) e atualiza um contador, após isso crie um novo array de com tamanha (n - i ) onde n é o tamanho do array antigo e i a quant de numeros repetidos, e entoa apenas copie os numeros que sobraram no array antigo para o novo.