Ich versuche, eine schnelle Sortierung zu machen, aber ich habe Probleme mit einer Stapelüberlauf Ausnahme in VB.net.Stapelüberlauf Ausnahme in Quicksort
Die Sortierung funktioniert richtig, wenn x = 3, intermittierend, wenn x = 5 und bei einer Gelegenheit sortiert Hälfte der Liste, wenn x = 10.
Bitte geben Sie dank
Dim x As Integer = 10
Dim numArrray(x - 1) As Integer
For i = 0 To x - 1
Randomize()
numArrray(i) = CInt(Rnd() * 9)
Next
Quicksort(numArrray, 0, numArrray.Length - 1)
For i = 0 To x - 1
Console.Write(numArrray(i))
Next
Console.ReadLine()
End Sub
Sub Quicksort(ByVal array() As Integer, ByVal min As Integer, ByVal max As Integer)
Dim pivot As Integer
If min < max Then
pivot = partition(array, min, max)
Quicksort(array, min, pivot - 1)
Quicksort(array, pivot + 1, max)
End If
End Sub
Function partition(ByVal array() As Integer, ByVal min As Integer, ByVal max As Integer) As Integer
Dim pivot As Integer = array(max)
Dim count As Integer = min - 1
Dim placeholder As Integer
For i = min To max - 1
If array(i) < pivot Then
count += 1
placeholder = array(count)
array(count) = array(i)
array(i) = placeholder
End If
Next
If array(max) < array(count + 1) Then
placeholder = array(count + 1)
array(count + 1) = array(max)
array(max) = placeholder
End If
Return count
End Function
Dies wird nicht kompilieren, haben Sie versucht, Debuggen und durchschreiten ? – Codexer
Da es sich um einen Stack-Überlauf handelt, wird es in den geschachtelten Aufrufen von Quicksort sein, wenn man auf Partition schaut, denke ich, dass Sie einen Begrenzungsfehler haben, wie in dieser Version des Algorithmus https://en.wikipedia.org/wiki/Quicksort count + 1 from partition, bei Ihrer aktuellen Implementierung kann die Zählung unter min_ beginnen und so bleiben_, was eine unendliche Regression wäre, da Ihr verschachtelter Aufruf die gleichen Eingaben hätte (dh wenn Sie count = min - 1 zurückgeben, dann führen Sie einen rekursiven Aufruf aus Zurück zu Quicksort (Array, Pivot + 1, Max) == Quicksort (Array, Min, Max) – tolanj
@tolanj Das ist sortiert Danke! – Chloe