快速排序的递归函数算法使用栈转换为非递归算法后反而速度变慢了呢?

Dim stackSize As Long
Dim top As Long
Const LowPosition As Integer = 0
Const HighPosition As Integer = 1

Function quickSortNonRecursion(ByRef listToSort() As Long) As Boolean
  Dim stack(100, 2) As Long
  Dim low As Long, high As Long, tempLow As Long, tempHigh As Long:::::::
  low = (LBound(listToSort)): high = (UBound(listToSort))
  Dim placeMeRight As Long, exchangeTemp As Long
  stack(top, LowPosition) = low: stack(top, HighPosition) = high
 
  While (top >= 0)
     placeMeRight = listToSort(stack(top, LowPosition))
     low = stack(top, LowPosition)
     high = stack(top, HighPosition)
     Do
        Do While (listToSort(stack(top, LowPosition)) < placeMeRight)
           stack(top, LowPosition) = stack(top, LowPosition) + 1
        Loop
        Do While (listToSort(stack(top, HighPosition)) > placeMeRight)
             stack(top, HighPosition) = stack(top, HighPosition) - 1
        Loop
        If (stack(top, LowPosition) <= stack(top, HighPosition)) Then
           exchangeTemp = listToSort(stack(top, LowPosition))
           listToSort(stack(top, LowPosition)) = listToSort(stack(top, HighPosition))
           listToSort(stack(top, HighPosition)) = exchangeTemp
           stack(top, LowPosition) = stack(top, LowPosition) + 1
           stack(top, HighPosition) = stack(top, HighPosition) - 1
        End If
     Loop While (stack(top, LowPosition) <= stack(top, HighPosition))
     tempLow = stack(top, LowPosition)
     tempHigh = stack(top, HighPosition)
     top = top - 1
     If (tempLow < high) Then
        top = top + 1
        stack(top, LowPosition) = tempLow
        stack(top, HighPosition) = high
     End If
     If (tempHigh > low) Then
        top = top + 1
        stack(top, LowPosition) = low
        stack(top, HighPosition) = tempHigh
     End If
 Wend
End Function

Function bubbleSort(ByRef listToSort() As Long) As Boolean
     Dim i As Long, j As Long, endOfList As Long, exchangeTemp As Long
                               endOfList = UBound(listToSort)
                              
     For i = LBound(listToSort) To endOfList
        For j = i To endOfList
          If (listToSort(i) > listToSort(j)) Then
              exchangeTemp = listToSort(i)
              listToSort(i) = listToSort(j)
              listToSort(j) = exchangeTemp
          End If
        Next j
     Next i
End Function
Private Sub Class_Initialize()
   stackSize = 90:  top = 0
  
End Sub
Function quickSortRecursion(ByRef listToSort() As Long, ByVal First As Long, ByVal Last As Long) As Boolean
   Dim low As Long, high As Long, placeMeRight As Long, exchangeTemp As Long
   low = First: high = Last
   placeMeRight = listToSort(low)
   Do
     Do While (listToSort(low) < placeMeRight)
        low = low + 1
     Loop
     Do While (listToSort(high) > placeMeRight)
        high = high - 1
     Loop
     If (low <= high) Then
        exchangeTemp = listToSort(low)
        listToSort(low) = listToSort(high)
        listToSort(high) = exchangeTemp
        low = low + 1
        high = high - 1
     End If
  Loop While (low <= high)
  If (First < high) Then quickSortRecursion listToSort(), First, high
  If (low < Last) Then quickSortRecursion listToSort(), low, Last
 

End Function

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值