这是关于一个看似naïve的问题的第三篇文章:我们如何编写二进制搜索程序?第一篇文章在这里.
第一次程序尝试出错了。的第二篇文章介绍了一个新的:
程序尝试#2。
从
I:= 1;J:= n
直到I = j或结果> 0循环
m:= (i + j) // 2——整数除法
如果T [m]≤x然后
I:= m + 1
elseifT [m] = x然后
结果m: =
其他的——在本例中,t [m] > x
J:= m - 1
结束
结束
问题是:对吗?
又没有。一个简单的例子可以证明:N = 1,数组t只包含一个元素T [1] = 0, x= 0.然后初始化设置两者我而且j1,I = j在进入循环时保持,循环立即停止,但是结果是0,而它应该是1 (wherex出现)。
现在是第三次尝试,让我们看看效果是否更好:
程序尝试#3。
从
I:= 1;J:= n
直到I = j循环
M:= (i + j + 1) // 2
如果T [m]≤x然后
I:= m + 1
其他的
J:= m
结束
结束
如果1≤我而且我≤n然后结果: =我结束
——如果不是,结果仍然是0。
这个怎么样?周三回答。
出版报告:已公布的第四篇(“星期三”)文章已发表在这里.
Bertrand Meyer首席技术官是埃菲尔铁塔的软件(Goleta, CA),沙夫豪森理工学院(瑞士)的教授和教务长,以及Innopolis大学(俄罗斯)软件工程实验室的负责人。
没有找到条目