有n个从小到大排列的正整数依次存储在数组a中,另有m(m<n)个正整数存储在数组b中。现要求只保留上述n+m个数据中从小到大排列的前n个数据,并依次存人数组a中,其余数据被剔除。
小李为了解决该问题,首先结合数组a的有序性,找出a,b两个数组中要剔除的m个数据,再将数组b中保留的数据插入到数组a中。示例如下:
n=10,数组a:2,4,6,8,10,12,14,16,18,20 m=5,数组b:41,11,17,29,9 处理后的数组a:2,4,6,8,9,10,11,12,14,16 |
(1)若n=8,m=4,数组a的元素依次为“3,4,6,10,13,14,21,25”,数组b的元素依次为“3,18,7,15”,按上述要求剔除m个数据后,数组b中保留的数据个数为______个
(2)实现上述功能的部分VB程序如下,请在划线处填入合适的代码。
Const n=1000,m=50
Dim a(1 To n)As Integer,b(1 To m)As Integer
Function getImax(k As Integer)As Integer
'在数组元素b(1)~b(k)中找出值最大的元素,返回其下标,代码略
End Function
Private Sub Commandl_Click( )
Dim i As Integer,j As Integer,k As Integer
Dim na As Integer,nb As Integer,imax As Integer,mean As Integerd
'读取数据分别存人数组a、b,代码略
na=n:nb=m
imax=getImax(nb)
For i=1 To m
If a(na)<= ___① Then
b(imax)=b(nb)
nb=nb-1
If nb>0 Then imax=getImax(nb)
Else
na=na-1
End If
Next i
Do While nb>0
i=1:j=na
imax= agetImax(nb)
Do While i<=j
mean =(i+j)\2
If a(mean)<b(imax) Then i= mean +1 Else j=mean-1
Loop
For k=na To iStep-1
___②
Next k
a(i+nb-1)=b(imax)
b(imax)=b(nb)
____③
nb=nb-1
Loop
'输出数组a,代码略
End Sub