当前位置:编程学习 > VB >>

求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} --------------------编程问答--------------------
引用 6 楼 z_wenqian 的回复:
Dim s() '合并后的数组
  On Error Resume Next
  s1 = Array(2, 5, 9, 13, 18, 20, 25, 31) '第一个数组
  s2 = Array(3, 4, 6, 8, 14, 22, 30) '第二个数组
  n1 = UBound(s1): n2 = UBound(s2): n = n1 + n2 + 1
  ReDim s(n……


这个程序有问题的,如果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 ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,