Бинарный поиск в массиве с использованием Fortran
Я использую книгу «Схемы программирования с помощью Schaum» на языке Fortran 77, и приведен пример двоичного поиска с использованием метода группы значений в скобках. Прежде всего, вот код:
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
Проблема в том, что когда я ввожу массив из 7 значений, как
2 | 9 | 11 | 23 | 49 | 55 | 66
И искать 66, например, когда
MID = 5
новый MID для следующего цикла становится 6. Но когда он равен 6, он не может быть увеличен для следующего цикла, потому что
MID = (START + FINISH)/2 = (6+7)/2 = 6
Где это должно быть 7 конечно.
Это все еще на 6. И моя программа никогда не дает мне выход конечно. Что мне здесь делать?