Puesto que comparar a[i] y a[j] es lo mismo que comparar a[j] con a[i], en el fondo hay que considerar que se está comparando todo 2 veces.
Una posible optimización, para evitar comparaciones superfluas es comenzar el segundo indice desde 1 mas que el indice primario.
Algo como ..
Código pseudo:
Ver originalfor( i = 0; i < size; ++i ) {
for( j = i+1; j < size; ++j ) {
// comparar a[i] y a[j].
// i y j nunca son iguales, no es necesario chequearlo
}
}