-1

我正在尝试实现 BubbleSort。但是,我得到一个数组越界错误;这发生在第三行。有人可以向我解释发生了什么问题吗?

For i As Integer = 0 To marks.Length Step 1
    For x As Integer = 0 To marks.Length - 1 Step 1
        If marks(x) > marks(x + 1) Then <<< "this where the problem is" 
            temp = marks(x + 1)
            marks(x + 1) = marks(x)
            marks(x) = temp
        End If
    Next x
Next i
For a As Integer = 0 To marks.Length
    MsgBox(marks(a))
Next
4

1 回答 1

0

看起来你有一个问题。x 将从 0 变为marks.Length-1,但在第三行您尝试获取marks(x + 1)。然而,一旦 x 达到它的最大值marks.Length - 1,这将评估为marks( x + 1 )== marks( (marks.Length - 1) + 1 )== marks( marks.Length )- 这确实超出了界限。

For第二行中的循环应该使用marks.Length - 2.
免责声明:如果您进行此更改,请添加测试以验证您的冒泡排序在边缘情况下仍然可以正常工作。如果没有,您可能需要进一步调整算法。

于 2014-08-29T08:13:47.577 回答