[.NET] Insertion sort

0

Mam problem muszę zaprogramować sortowanie przez wstawianie z pętlami do loop until i niestety wywala mi błąd, proszę o pomoc

Sub Sortuj(ByRef tab() As Integer)
    Dim i, j, k As Integer
    Dim max As Integer = UBound(tab)
    Do
      k = tab(i)
      j = i - 1
      Do
        If (k < tab(j)) Then
          tab(j + 1) = tab(j)
          j += 1
        Else
          Exit Do
        End If
      Loop Until (j >= 0)
      tab(j + 1) = k
    Loop Until i = max
  End Sub

 

Wywala mi błąd w części If (k < tab(j)) Then

1

Wywala mi błąd w części If (k < tab(j)) Then

Jaki błąd?

0

user image

1

Wychodzisz poza tablicę.

k = tab(i) - a ile wynosi i w tym miejscu, na pewno 0?
j = i -1 - jeśli i było 0 to j będzie -1, a prawdopodobniej tab(-1) nie istnieje.

0

ten z pętlą while i for wchodzi mi bez problemu:

Dim k, i, j As Integer

    For j = 1 To UBound(tab)
      k = tab(j)
      i = j - 1

      Do While i >= 0
        If tab(i) > k Then
          tab(i + 1) = tab(i)
          i -= 1
        Else
          Exit Do
        End If
      Loop
      tab(i + 1) = k
    Next j
 

tylko muszę mieć z pętlą do loop until, heh

0

Zrobiłem, brakowało warunku, który wychodzi z pętli, gdy wartość w tablicy jest < 0

1 użytkowników online, w tym zalogowanych: 0, gości: 1