2014-08-29 146 views
-1

我正在嘗試實現BubbleSort。但是,我得到一個數組越界的錯誤;這發生在第三行。有人可以向我解釋發生了什麼事嗎?冒泡排序和IndexOutOfRangeException

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 
+1

歡迎來到Stack Overflow。我編輯了你的問題;我認爲這樣會更好地收到。如果您不同意編輯,則可以將其回滾。 (單擊「編輯...之前」文本以獲取回滾菜單)。祝你好運! – 2014-08-29 08:07:22

回答

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
免責聲明:如果您進行此更改,請添加一項測試以驗證您的Bubble Sort仍能正確處理邊緣案例。如果沒有,您可能需要稍微調整算法。