Ok
Di per sé mi pare funzionalmente corretto ma ...
1) fai "giri" inutili con le variabili (guarda bene ...)
2) è ottimizzabile, il ciclo interno puoi NON farlo se bArray[i] è già a true (perché vuol dire che quel valore l'avevi già beccato in precedenza)
Corretto
Basta un banale ciclo for ma .... servono 2 indici: uno è quello "lineare" nel nuovo array (che tu hai chiamato temp), l'altro è quello nell'array originale, dove però prendi solo i valori con il corrispondente false.