朱鹮舞剧讲了什么:请vb哥哥姐姐帮俺解释一下拆半查找法,就是下面的实例

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 16:16:58
就是这段代码 帮忙解释一下

Private Sub Form_Load()
'学号存放在数组h()中
h(1) = 1201: h(2) = 1202: h(3) = 1203
h(4) = 1205: h(5) = 1206: h(6) = 1207
h(7) = 1209: h(8) = 1210: h(9) = 1211
h(10) = 1215
'成绩存放在数组d(,)中
d(1, 1) = 92: d(1, 2) = 86
d(2, 1) = 78: d(2, 2) = 71
d(3, 1) = 83: d(3, 2) = 74
d(4, 1) = 67: d(4, 2) = 75
d(5, 1) = 71: d(5, 2) = 55
d(6, 1) = 62: d(6, 2) = 80
d(7, 1) = 98: d(7, 2) = 83
d(8, 1) = 99: d(8, 2) = 80
d(9, 1) = 57: d(9, 2) = 67
d(10, 1) = 80: d(10, 2) = 78
End Sub
Private Sub command1_Click()
Dim no As Integer, flag As Integer
Dim m As Integer, top As Integer, bott As Integer
flag = -1 '置未找到标志
top = 1: bott = 10 '设定范围
no = Val(Text1.Text) '取学号
If no < h(top) Or no > h(bott) Then
flag = -2 '若超出学号范围, 置特殊标志-2
End If

Do While flag = -1 And top <= bott
m = (top + bott) / 2 '取中点
Select Case True
Case no = h(m) '找到
flag = m '置找到标志
Text2.Text = h(m)
Text3.Text = d(m, 1)
Text4.Text = d(m, 2)
Text5.Text = (d(m, 1) + d(m, 2)) / 2
Case no < h(m) '小于中间数据
bott = m - 1 '上半部
Case no > h(m) '大于中间数据
top = m + 1 '下半部
End Select
Loop
If flag < 0 Then '判是否找不到
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
MsgBox "无此学生!"
End If
Text1.SetFocus
End Sub

我没学过VB
但是折半查找知道
就是二分查找
说个最简单的
求根n的近似值 精确到N位
x1:=0;{范围}
x2:=n;
while abs(x1-x2){abs 绝对值的意思}>0.00000000000001 do{控制精度}
begin
x:=(x1+x2)/2;{折半}
if x*x<n then x1:=x{重新确定范围}
else x2:=x;
if x*x=n then break;
inc(i);{i:=i+1;}
end;
最后x得知就是根n的近似值