Wyszukiwanie binarne w kwestii tablicy przy użyciu Fortran
Używam książki Schaum's Outline of Programming With Fortran 77 i jest przykład wyszukiwania binarnego z wykorzystaniem metody grup wartości w bracketingu. Po pierwsze tutaj jest kod:
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
Problem polega na tym, że gdy wprowadzę tablicę 7 wartości jak
2 | 9 | 11 | 23 | 49 | 55 | 66
I szukaj na przykład 66, kiedy
MID = 5
, nowy MID dla następnej pętli staje się 6. Ale kiedy ma 6 lat, nie może zostać zwiększony dla następnej pętli, ponieważ
MID = (START + WYKOŃCZENIE) / 2 = (6 + 7) / 2 = 6
Gdzie powinno być oczywiście 7.
Nadal jest 6. I mój program nigdy nie daje mi oczywiście wyjścia. Co mam tutaj zrobić