Binäre Suche in Array-Ausgabe mit Fortran
Ich verwende das Buch Outline of Programming With Fortran 77 von Schaum, und es gibt ein Beispiel für die binäre Suche mit der Methode der Wertegruppen in Klammern. Hier ist zunächst der Code:
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
Das Problem ist, wenn ich 7 Werte wie ein Array eingebe
2 | 9 | 11 | 23 | 49 | 55 | 66
Und suchen Sie zum Beispiel nach 66, wenn
MID = 5
wird der neue MID für die nächste Schleife zu 6. Aber wenn es 6 ist, kann es nicht für die nächste Schleife erhöht werden, weil
MITTE = (START + ENDE) / 2 = (6 + 7) / 2 = 6
Wo es 7 sein sollte natürlich.
Es läuft noch am 6. Und mein Programm gibt mir natürlich nie eine Ausgabe. Was soll ich hier machen