回 帖 发 新 帖 刷新版面

主题:请教各位老师帮忙解决问题!谢谢!

运行界面如上,单击“开始排序”按钮,出现一个输入框,要求用户输入数组元素的个数,当用户输入个数后,随机生成相应个数的2位数并将它们添加到左边的列表list1中,然后将每个数组元素的下标按数组元素本身从大到小的顺序显示在右边的列表框中,本人编写代码如下:

Private Sub Command1_Click()
  Dim i%, j%
   Dim n%  '数组元素的个数
   Dim a%()
   n = Val(InputBox("请输入数组元素的个数"))
   ReDim a%(1 To n)
   Randomize
   For i = 1 To n
      a(i) = Int(100 * Rnd + 10)
      List1.AddItem Str(a(i)) & "  " & i
      List2.AddItem ""
   Next i
   Dim k%
   For i = 1 To n
       k = 1
       m = 0  '标记变量,表示不相等
     For j = 1 To n
        If a(i) < a(j) Then k = k + 1
     Next j
     List2.List(k - 1) = Str(i)
   Next i
End Sub


但是该代码只有在每个数组元素都不相同的情况下,才能完全正常按数驵元素从大到小的顺序显示相应的下标;如果其中有相同的数组元素,则显示就不能正常。时间紧迫,请各位老师大侠帮助解决!本人非常感谢!


回复列表 (共1个回复)

沙发

Private Sub Command1_Click()
   Dim i%, j%, n%, k%, m%, a%()
   n = Val(InputBox("请输入数组元素的个数"))
   If n < 2 Then Exit Sub
   ReDim a%(1 To n)
   List1.Clear: List2.Clear
   Randomize
   
   For i = 1 To n
      a(i) = Int(100 * Rnd + 10)
      List1.AddItem Str(a(i)) & "  " & i
      List2.AddItem ""
   Next i
   
   For i = 1 To n
       k = 1
     For j = 1 To n
       If i <> j Then
         If a(i) = a(j) Then m = j: Debug.Print i, j, a(i)
         If a(i) < a(j) Then k = k + 1
       End If
     Next j
     List2.List(k - 1) = i
     If m Then List2.List(k) = m: m = 0
   Next i

End Sub

我来回复

您尚未登录,请登录后再回复。点此登录或注册