1)将原始数据按升序分成若干有序段。
2)将第1段和第2段进行合并,使得合并后的数据依旧有序,得到新的有序段。
3)将新的有序段再次和下一个有序段进行合并。
4)重复上述操作,直到全部数据变成一个有序段为止,排序结束。
如数据:1、3、9、4、5、7、2、6,第1段为1、3、9,第2段为4、5、7,将第1段和第2段合并,得到新的第1段为1、3、4、5、7、9。继续和下一段2、6进行合并,合并后段数变为1段,则排序结束。
编写VB程序,实现分段排序功能:在文本框Text1中输入数据总量,单击“数据生成”按钮Command1后,在列表框List1中显示原始数据,然后单击“分段排序”按钮Command2,在列表框List2中显示排序后的结果。程序运行界面如图所示。
请回答下列问题:
A .List1.Clear / B .List1.List="" / C .List1.Text="" / D .List1.Caption="空白" )。
Dim a(1 To 1000) As Integer
Dim n As Integer
Private Sub Command1_Click()
'输入数据总量n,随机生成n个数据保存在数组
'a(1)~a(n)中,并在List1中显示数据,代码略
End Sub
Private Sub Command2_Click()
Dim b(1 To 10000) As Integer
Dim p1 As Integer, p2 As Integer, t1 As Integer, t2 As Integer
Dim t As Integer, k As Integer, i As Integer, j As Integer
p1 = 1
t1 = leng(p1)
p2 = p1 + t1
Do While p2 <= n
i = p1: j = p2: t = 1
Do While i < p2 Or j < p2 + t2
If j >= p2 + t2 Or i < p2 And a(i) < a(j) Then
b(t) = a(i): i = i + 1
Else
b(t) = a(j): j = j + 1
End If
t = t + 1
Loop
For k = 1 To
a(k) = b(k)
Next k
t1 = t1 + t2
Loop
'在List2中输出数组a(i)的值,代码略
End Sub
Function Leng(ByVal p As Integer) As Integer
'该函数返回数组a中数组下标p开始的升序有序段的长度,代码略
End Function