求vb高手:
  给定两组已按升序排列的整数数据,使用过程编写程序把它们合并为一组仍能按升序排列的数据
  
  

解决方案 »

  1.   

    相信这是个作业,代码就不给了.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
      

  2.   

    本帖最后由 bcrun 于 2011-05-16 13:55:55 编辑
      

  3.   


    这个程序有问题的,如果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 
      

  4.   

    谢楼上的发现错误,是我考虑不周,改进如下:
      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