【发布时间】:2016-07-10 01:22:01
【问题描述】:
我最近一直在尝试在 Visual Basic 中创建一个选择排序程序。我已经设法让它将数组中的整数排序为降序但是,当我尝试使用相同的方法让它将数组排序为升序时,它会成功但我会得到一个“索引出范围”错误。以下是我的代码:
Sub sortDescending()
Dim array() As Integer = {3, 5, 200}
Dim maxPos As Integer
Dim firstI As Integer
While firstI <= UBound(array)
For i = firstI To UBound(array)
If array(i) > array(maxPos) Then
maxPos = i
End If
Next
Dim largestNumber As Integer = array(maxPos)
array(maxPos) = array(firstI)
array(firstI) = largestNumber
firstI = firstI + 1
maxPos = firstI
Console.WriteLine(largestNumber)
End While
End Sub
Sub sortAscending()
Dim array() As Integer = {3, 5, 200}
Dim minpos As Integer
Dim firstI As Integer
While firstI >= LBound(array)
For i = firstI To LBound(array)
If array(i) < array(minpos) Then
minpos = i
End If
Next
Dim smallestNumber As Integer = array(minpos)
array(minpos) = array(firstI)
array(firstI) = smallestNumber
firstI = firstI + 1
minpos = firstI
Console.WriteLine(smallestNumber)
End While
正如我所说,降序排序没有问题,但是升序排序给了我错误。有人能告诉我如何解决这个问题吗?谢谢:)
【问题讨论】:
-
您需要告诉我们您在哪一行收到错误。
data = data.OrderByDescending(Function(x) x).ToArray()也是您所需要的。将OrderByDescending更改为OrderBy以进行升序 -
哦,我的错,我收到“Dim minimumNumber As Integer = array(minpos)”的错误。不幸的是,这个程序用于分配,因此需要使用选择排序方法来完成:/跨度>
-
firstI >= LBound(array)始终为 True,因此您永远不会退出循环...一旦超过 2,索引超出范围。除非您出于特定原因构建自己的排序例程,否则您应该按照 Plutonix 的建议进行操作并使用内置的排序功能。 -
你知道我可以解决这个问题的方法吗?