n1 = UBound(s1): n2 = UBound(s2): n = n1 + n2 + 1 ReDim s(n) k = 0: i = 0: j = 0 'k:s的指针 i:s1的指针 j:s2的指针 Do If s1(i) < s2(j) Then '如果 S1 的数小于 S2 的数,就将 S1 的数放入 S, 否则将 S2 的数放入 S s(k) = s1(i): i = i + 1 If i > n1 And j < n2 Then For jj = j To n2: k = k + 1: s(k) = s2(jj): Next jj: Exit Do End If Else s(k) = s2(j): j = j + 1 If i < n1 And j > n2 Then For ii = i To n1: k = k + 1: s(k) = s1(ii): Next ii: Exit Do End If End If k = k + 1 Loop Until k > n
A数组又numA个数字,
B数组又numB个数字
C数组大小是A大小+B大小.
循环numA+numB次
if A数组数字>B数组数字 then
A数组数字放C数组里面去,
并且A数组下标后移1,
如果A数组到尾巴了,设置一个标记,表明是A数组到尾巴了,退出循环
else
B数组数字放C数组里面去,
并且B数组下标后移1,
如果B数组到尾巴了,设置一个标记,表明是B数组到尾巴了,退出循环
end if
下次循环next如果 设置的标记是A数组到尾巴了
把B数组剩下的数字移动到C数组,for,,next...
else
把A数组剩下的数字移动到C数组,for,,,next...
结束if
这个程序有问题的,如果ubound(s1)<ubound(s2)会出现数据处理不完全的问题。
我写了程序,思路和你这个一样,但是程序差别有点大
怀疑是作业,程序就不贴了。Dim s() '合并后的数组
On Error Resume Next
Dim s1, s2, n1, n2, n, k, i, j
s1 = Array(2, 5, 9, 13) '第一个数组
s2 = Array(3, 4, 6, 8, 14) '第二个数组
n1 = UBound(s1): n2 = UBound(s2): n = n1 + n2 + 1
ReDim s(n)
k = 0: i = 0: j = 0 'k:s的指针 i:s1的指针 j:s2的指针
Do
If s1(i) < s2(j) Then '如果 S1 的数小于 S2 的数,就将 S1 的数放入 S, 否则将 S2 的数放入 S
s(k) = s1(i): i = i + 1
Else
s(k) = s2(j): j = j + 1
End If
k = k + 1
Loop Until k > n
Debug.Print "s1:";: For i = 0 To UBound(s1): Debug.Print s1(i);: Next i: Debug.Print ""
Debug.Print "s2:";: For i = 0 To UBound(s2): Debug.Print s2(i);: Next i: Debug.Print ""
Debug.Print "s:";: For i = 0 To UBound(s): Debug.Print s(i);: Next i: Debug.Print ""
结果:s1: 2 5 9 13
s2: 3 4 6 8 14
s: 2 3 4 5 6 8 9 13
s1 = Array(2, 5, 9, 13, 18, 20, 25, 31, 34, 36, 37) '第一个数组
s2 = Array(3, 4, 6, 8, 14, 22, 30) '第二个数组
n1 = UBound(s1): n2 = UBound(s2): n = n1 + n2 + 1
ReDim s(n)
k = 0: i = 0: j = 0 'k:s的指针 i:s1的指针 j:s2的指针
Do
If s1(i) < s2(j) Then '如果 S1 的数小于 S2 的数,就将 S1 的数放入 S, 否则将 S2 的数放入 S
s(k) = s1(i): i = i + 1
If i > n1 And j < n2 Then
For jj = j To n2: k = k + 1: s(k) = s2(jj): Next jj: Exit Do
End If
Else
s(k) = s2(j): j = j + 1
If i < n1 And j > n2 Then
For ii = i To n1: k = k + 1: s(k) = s1(ii): Next ii: Exit Do
End If
End If
k = k + 1
Loop Until k > n