2014-08-29 3 views
-1

Я пытаюсь реализовать BubbleSort. Однако я получаю массив из связанной ошибки; это происходит на третьей линии. Может кто-нибудь объяснить мне, что происходит не так?Bubble sort и 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.
Отказ от ответственности: добавьте тест, чтобы убедиться, что ваш Bubble Sort по-прежнему работает правильно для краевых случаев, если вы сделаете это изменение. Возможно, вам придется немного подкорректировать алгоритм, если это не так.