0
クイックソートをしようとしていますが、VB.netのスタックオーバーフロー例外に問題があります。クイックソートのスタックオーバーフロー例外
ときのx = 3ソートが断続的にX = 5とそのA以来ときのx = 10
教えてください、ありがとう
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
これはコンパイルされません、デバッグしてから踏み込んだ? – Codexer
スタックオーバーフローのため、クイックソートへのネストされた呼び出しで、パーティションを見ています。このバージョンのアルゴリズムに従って、境界エラーがあると思います。https://en.wikipedia.org/wiki/Quicksortあなたのネストされた呼び出しが同じ入力を持つように、無限回帰になります(つまり、count = min -1を返した場合、再帰呼び出しを行います)。クイックソート(配列、ピボット+ 1、最大)==クイックソート(配列、分、最大) – tolanj
@tolanjそれはあなたに感謝しました! – Chloe