【发布时间】:2012-06-18 01:50:43
【问题描述】:
我正在使用 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 = (开始 + 完成)/2 = (6+7)/2 = 6
当然应该是 7。
它仍然在 6。当然,我的程序从来没有给我输出。 我该怎么办?
【问题讨论】:
-
请注意,二进制搜索并不总是比线性搜索快,尽管您确实希望它会如此。 (stackoverflow.com/q/10524032/748858)
-
好的,谢谢。我去看看。