Tra

scambio=.FALSE.

e

IF(.NOT.scambio) EXIT

c'è un intero ciclo DO..ENDDO

Se durante quel ciclo avviene uno scambio, allora avrai scambio=.TRUE., altrimenti vuol dire che il vettore è ordinato e non c'è più bisogno di continuare l'esecuzione del programma.