2014-08-29 2 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

스택 오버플로에 오신 것을 환영합니다. 나는 당신의 질문을 편집했다. 나는 이것이 그것이 더 좋은 방법으로 받아 들여질 것이라고 생각한다. 편집에 동의하지 않으면 다시 롤백 할 수 있습니다. ("편집 된 ... 이전"텍스트를 클릭하면 롤백 메뉴가 나타납니다). 행운을 빕니다! –

답변

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을 사용해야합니다.
면책 조항 :이 변경을 수행하면 버블 정렬이 가장자리 경우에도 올바르게 작동하는지 테스트를 추가하십시오. 그렇지 않으면 알고리즘을 조금 더 조정해야 할 수도 있습니다.