key<d(m) key>d(m) key>d(m) key=d(m)
(1) (2) (3) (4)
2.流程图
把刚才的对分查找过程用流程图来表示。要得到①处“未找遍”的确切条件,学生一时有些困难,所以先引导学生思考完成下面具体找数的过程。
问题五:流程图中②处“中间结点位置m”如何计算?
学生根据猜数游戏经验,很快得出结论:fix((i+j)/2)或int((i+j)/2)
问题优:流程图中③、④处的处理语句是什么?
学生结合猜数过程,不难得出结论:③j=m-1 ④i=m+1
问题七:现在大家一起来思考流程图中①处“未找遍”的条件是什么?
教师提示i、j的动态变化,学生思考讨论,最后得出结论:i<=j 。
设计意图:用流程图清晰地表达对分找数的过程,设计的三个问题巧妙地个个击破本算法的难点,进一步明确“对分查找”的设计思路。
(四)复设要点,程序实现
Private Sub Command1_Click()
Dim key, pos As Integer
key = Val(Text1.Text) '在文本框1中输入查找数
nc = 0: pos = 0 '用pos来记录查到的数的位置
i = 1: j = 10000
① '查找(循环)范围
nc = nc + 1
m = ② '计算中点位置
If d(m) = key Then毕业论文http://www.youerw.com/
③ : Exit Do '用pos记录在数组中的序号,结束查找
elseif d(m) < key Then
④ '修改查找范围
Else
⑤ '修改查找范围
End If
Loop
If ⑥ Then '找没找到的标志
Text2.Text = "找不到"
Else
Text2.Text = "在d(" + Str(pos) + ")中"