m = n
Do While (35) If a(m) = a(m - 1) Then For k = (36) a(k - 1) = a(k) Next k (37) End If
图5 题12的运行界面
(38) Loop
ReDim Preserve a(n)
End Sub
Private Sub Command1_Click() Dim b(), i%
b = Array(23, 45, 45, 60, 70, 70, 70, 90) Call p( (39) )
For i = 0 To UBound(b) Print b(i);
Next i End Sub
13.插入排序。插入排序是每输入一个数,马上插入到数组中。数组在输入过程中总是有序的。程序运行界面如图6所示。在插入排序中,涉及到查找、数组数的移动和元素插入等算法。
【提示】
此题关键在于编一个插入排序过程,插入排序法的思路是: 对数组已有n个有序数,当输入某数x时: (1) 找x应在数组中的位置j
(2) 将n-j个数依次往后移,使位置为j的数让出。 (3) 将数x放入数组中应有的位置j,一个数插入完成。 对于若干个数输入,只要调用插入排序过程即可。 Dim n As Integer
Private Sub Text1_KeyPress(KeyAscii As Integer) Static bb!(1 To 20) Dim i%
If n = 20 Then
MsgBox \数据太多!\警告\ End If
If KeyAscii = 13 Then n = n + 1
insert ( 40) )
Picture2.Print Text1 '打印刚输入的数
图6 题13的运行界面 For i = 1 To n '打印插入后的有序数
Picture1.Print bb(i); Next i
Picture1.Print Text1 = \ End If
End Sub
Sub insert(a() As Single, ByVal x!) Dim i%, j% j = 1
Do While (41) '查找x应插入的位置 j = j + 1 Loop
For i = n - 1 To j Step -1 (42) Next i
a(j) = x End Sub
'n-j个元素往后移 'x插入数组中的第j个位置