我目前正在尝试在Visual Basic中编写快速排序算法。
我最初尝试通过查找预先编写的代码来解决这个问题。但是,我发现的大部分代码都是我没有经验的语言。
我还通过寻找伪代码示例来尝试这一点。我将我的代码与互联网上可用的伪代码示例进行了比较,但仍无法正确运行代码。
当前问题是'未处理的类型' System.StackOverflowException'发生在QuickSort.exe'每当使用“intGeneratedData”中的任何随机生成的数据运行该过程时阵列。此错误指向“私人子”'程序的一行。
Private Sub QuicksortAlgorithm(ByRef intGeneratedData() As Integer, ByVal intSize As Integer)
Dim intPivotValue, intLower, intUpper, intSwapTemp As Integer
If (intSize > 1) Then
intPivotValue = intGeneratedData((Int((intSize * Rnd()) + 1)))
intLower = 0
intUpper = (intSize - 1)
While intLower <= intUpper
While intGeneratedData(intLower) < intPivotValue
intLower += 1
End While
While intGeneratedData(intUpper) > intPivotValue
intUpper -= 1
End While
'Swap lower and upper value
If intLower <= intUpper Then
intSwapTemp = intGeneratedData(intLower)
intGeneratedData(intLower) = intGeneratedData(intUpper)
intGeneratedData(intUpper) = intSwapTemp
intLower += 1
intUpper -= 1
End If
End While
QuicksortAlgorithm(intGeneratedData, intLower)
QuicksortAlgorithm(intGeneratedData, (intUpper - intLower))
End If
End Sub
注意:调用算法时,&#39; intSize&#39;始终是数组的大小&#39; intGeneratedData&#39;。
我觉得好像还有其他错误,我在这个过程中没有提到,因为我之前遇到了另一个错误,然后我改变了多个事情来导致这个。我一直试图让这个工作几天但没有成功。如果这个帖子对这个问题没有任何信息,请道歉。
任何帮助将不胜感激。
答案 0 :(得分:0)
这是一个递归算法,你在函数中没有位置,你可以使用return语句提前退出它。您可以在函数底部再调用两次QuicksortAlgorithm。你的算法永远不会完成 - 它会永远地自我调用。如果我不得不猜测我会把它添加到你的函数顶部:
If intSize < 1 Then
Return
End If
来自:http://mark.random-article.com/weber/ada/week13.html
请参阅:
递归要求
...您缺少退出条件
退出条件或“停止案例”(正如书中所述) - 我也听说这被称为“基本案例”。这是函数最终返回的状态,而不再调用自身。退出条件是递归函数的关键组成部分。如果你没有,它将永远不会退出。 退出条件通常是递归函数中的第一件事。