求vb高手:给定两组已按升序排列的整数数据,使用过程编写程序把它们合并为一组仍能按升序排列的数据!
求vb高手:给定两组已按升序排列的整数数据,使用过程编写程序把它们合并为一组仍能按升序排列的数据
--------------------编程问答-------------------- 急急呀 求vb 高手帮忙啦... --------------------编程问答-------------------- 为什么结了 2个 贴!结贴率 还是为0呀 --------------------编程问答-------------------- 合并数组,再次排序. --------------------编程问答-------------------- 能给出详细的 代码吗?麻烦您了
我刚刚基础vb 不会
一定给分 --------------------编程问答-------------------- 相信这是个作业,代码就不给了.
1 就是先把数组A复制到结果数组C,然后把数组B复制到数组C(是A的后面),然后给数组C排序.
2 就是:(这个是我做的)
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
--------------------编程问答-------------------- --------------------编程问答-------------------- 以上结果:
s = {2,3,4,5,6,8,9,13,14,18,20,22,25,30,31} --------------------编程问答--------------------
这个程序有问题的,如果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
补充:VB , 基础类