Búsqueda binaria en problema de matriz usando Fortran
Estoy utilizando el libro Esquema de programación con Fortran 77 de Schaum, y hay un ejemplo sobre la búsqueda binaria utilizando el método de agrupamiento de valores entre corchetes. En primer lugar, aquí está el código:
INTEGER X(100)
INTEGER RANGE
INTEGER START , FINISH
PRINT *, 'Number of values ?'
READ *, N
DO 10 I = 1, N
READ *, X(I)
END DO
PRINT *, 'Enter Value'
READ *, VAL
START = 1
FINISH = N
RANGE = FINISH - START
MID = (START + FINISH) /2
DO WHILE( X(MID) .NE. VAL .AND. RANGE .NE. 0)
IF (VAL .GT. X(MID))THEN
START = MID
ELSE
FINISH = MID
END IF
RANGE = FINISH - START
MID = (START + FINISH)/2
END DO
IF( X(MID) .NE. VAL) THEN
PRINT *, VAL, 'NOT FOUND'
ELSE
PRINT *, 'VALUE AT' , MID
END IF
END
El problema es que cuando entro en una matriz de 7 valores como
2 | 9 | 11 | 23 | 49 | 55 | 66
Y busca 66 por ejemplo, cuando
MID = 5
, el nuevo MID para el siguiente bucle se convierte en 6. Pero cuando son 6, no se puede incrementar para el siguiente ciclo porque
MID = (START + FINISH) / 2 = (6 + 7) / 2 = 6
Donde debería estar 7 por supuesto.
Todavía está en 6. Y mi programa nunca me da una salida, por supuesto. ¿Qué debo hacer aquí?