Un par de observaciones, no se si esto que digo será correcto:
Si no inicias 'i', con que valor comienza en bucle? Siempre iniciará en 0? Lo mismo para el bucle interno y la 'j'; si no aseguras que 'i' o 'j' sea un valor del rango del array te puede provocar una violacion de segmento.
Otra cosa, estas haciendo mas comprovaciones de las necesarias; en cambio con lo que comenté siempre te aseguras de no recomparar lo que ya te resultó diferente. Pongamos el caso del siguiente array {0, 0}, cuando lo envio a tu algoritmo:
Código C:
Ver originalentre 0 y 2
entre 0 y 2
[0] == [0] ? no
[0] == [1] ? si, retorna true con 2 comprovaciones
Ahora con el otro algoritmo:
Código C:
Ver originalentre 0 y 2-1
entre (valor anterior) y 2
[0] == [0+1] ? si, retorna true con 1 comprovacion
En tu algoritmo en el caso menos favorable (cuando todos son diferentes) se hacen tamArreglo*tamArreglo comprovaciones, si es de 5 se hacen 5x5 comprovaciones; de la otra forma se hacen (5-1)+(5-2)...(5-5).
Una ultima cosa, todo esto no lo he comentado para incordiar :)) Creo que @Levgms al ser el interesado deberia pronunciarse un poco.
Saludos
vosk