Witam,
napisałem algorytm sortowania przez scalanie w Visual Basic, jednak pojawia się błąd StackOverFlow Exception
Nie potrafię znaleźć błędu. Będę wdzięczny za pomoc. Dziękuję.
Module Module1
Dim n As Integer = 19
Sub generujtab(ByRef tab() As Integer)
Randomize()
Dim i As Integer = 0
For i = 0 To n
tab(i) = CInt(((100 * Rnd()) - 1))
Next
End Sub
Sub wyswietl(ByVal tab() As Integer)
Dim i As Integer
For i = 0 To n
Console.Write(CStr(tab(i)) + " ")
Next
End Sub
Sub merge(ByRef tab() As Integer, ByVal p As Integer, ByVal mid As Integer, ByVal k As Integer)
Dim tab2(n) As Integer
Dim i As Integer
Dim p1, p2, k1, k2 As Integer
p1 = p
p2 = mid + 1
k1 = mid
k2 = k
i = p1
Do While (p1 <= k1) And (p2 <= k2)
If tab(p1) < tab(p2) Then
tab2(i) = tab(p1)
p1 += 1
ElseIf tab(p1) > tab(p2) Then
tab2(i) = tab(p2)
p2 += 1
End If
i += 1
Loop
Do While p1 <= k1
tab2(i) = tab(p1)
p1 += 1
i += 1
Loop
Do While p2 <= k2
tab2(i) = tab(p2)
p2 += 1
i += i
Loop
For i = p To k
tab(i) = tab2(i)
Next
End Sub
Sub mergesort(ByRef tab() As Integer, ByVal p As Integer, ByVal k As Integer)
Dim q As Integer
If p < k Then
q = CInt((p + k) / 2)
mergesort(tab, p, q)
mergesort(tab, q + 1, k)
merge(tab, p, q, k)
End If
End Sub
Sub main()
Dim tab(n) As Integer
generujtab(tab)
wyswietl(tab)
Console.WriteLine()
mergesort(tab, 0, n)
wyswietl(tab)
Console.Read()
End Sub
End Module