【发布时间】:2018-05-21 13:54:51
【问题描述】:
我正在制作一个程序,该程序通过单击按钮在 ListBox 中随机生成 100 行 15 行的数字。我需要将它从最大到最小,从左到右跨行排序。我有一个冒泡排序,但它从最小到最大排序,并且只在第一列下排序。
这就是我生成数字的方式:
Private Sub btnGen_Click(sender As Object, e As EventArgs) Handles btnGen.Click
'Number Generator
Dim rn As New Random()
Dim array(14) As Integer
Dim temp As Integer
Dim st As String
For y As Integer = 1 To 100
For x As Integer = 1 To 15
array(x - 1) = rn.Next(100, 1000)
Next
txtList.Items.Add(ats(array))
Next
st = st & vbNewLine
Call sort()
Using fs As New FileStream(My.Settings.DAT_PATH, FileMode.Append, FileAccess.Write)
Using sw As New StreamWriter(fs)
sw.WriteLine()
End Using
End Using
End Sub
Function ats(ar As Integer()) As String
'FUNCTION for array to string seperated by comma
Dim sb As New System.Text.StringBuilder
For x As Integer = 0 To UBound(ar)
If x = UBound(ar) Then
sb.Append(ar(x).ToString)
Else
sb.Append(ar(x).ToString & ", ")
End If
Next
Return sb.ToString
End Function
这就是我对它们进行排序的方式:
Sub sort()
'bubble sort from biggest to smallest
txtList.Sorted = True
Dim array(14) As Integer
Dim temp As Integer
For ipass = 1 To UBound(array)
For i = 0 To UBound(array) - 1
If array(i) > array(i + 1) Then
temp = array(i)
array(i) = array(i + 1)
array(i + 1) = temp
array.Reverse()
End If
Next i
Next ipass
End Sub
最后,这是我当前结果的一个示例:
107、512、139、233、582、460、698、231、395、724、717、284、699、419、825
119、214、513、382、538、161、431、603、573、354、757、307、204、906、200
124、493、153、507、675、878、698、911、625、171、915、174、270、629、770
126、585、480、317、731、193、385、143、152、374、246、124、205、347、936
139、497、422、381、127、968、236、637、406、758、594、944、929、733、428
任何帮助将不胜感激
【问题讨论】:
-
array.Reverse()的用途是什么? -
我试图让它反转排序。打算把它拿出来,因为它完全没有改变结果。
-
Sub btnGen_Click中的array与Sort()中的array不同。您应该做的是将array作为参数传递给Sort()方法。 Wikipedia: Scope (computer science) 是相关的。