Visual Basic Quicksort算法崩溃 - ' System.StackOverflowException'

时间:2015-10-16 21:37:53

标签: vb.net algorithm quicksort

我目前正在尝试在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;。

我觉得好像还有其他错误,我在这个过程中没有提到,因为我之前遇到了另一个错误,然后我改变了多个事情来导致这个。我一直试图让这个工作几天但没有成功。如果这个帖子对这个问题没有任何信息,请道歉。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是一个递归算法,你在函数中没有位置,你可以使用return语句提前退出它。您可以在函数底部再调用两次QuicksortAlgorithm。你的算法永远不会完成 - 它会永远地自我调用。如果我不得不猜测我会把它添加到你的函数顶部:

If intSize < 1 Then
   Return
End If

来自:http://mark.random-article.com/weber/ada/week13.html

请参阅:

递归要求

...您缺少退出条件

退出条件或“停止案例”(正如书中所述) - 我也听说这被称为“基本案例”。这是函数最终返回的状态,而不再调用自身。退出条件是递归函数的关键组成部分。如果你没有,它将永远不会退出。 退出条件通常是递归函数中的第一件事。