Quick Sort


Option Explicit
Sub Main()
    Dim someArr, x, ArrStr
    someArr = Array(31, 25, 12, 22, 11, 85, 68, 574, 25, 36, 287, 36, 16)
    Call quickSort(someArr)
    For Each x In someArr
        ArrStr = ArrStr & x & ", "
    Next
    ArrStr = left(ArrStr, Len(ArrStr) - 2)
    MsgBox "The Array after Quick Sort is : " & vbCrLf & ArrStr
End Sub

Sub quickSort(targetArray)
    Call q_sort(targetArray, 0, UBound(targetArray))
End Sub
Sub q_sort(targetArray, left, right)
    Dim pivot, l_hold, r_hold

    l_hold = left
    r_hold = right
    pivot = targetArray(left)
    While left < right
        While targetArray(right) >= pivot And left < right
            right = right - 1
        Wend
        If left <> right Then
            targetArray(left) = targetArray(right)
            left = left + 1
        End If
        While targetArray(left) <= pivot And left < right
            left = left + 1
        Wend
        If left <> right Then
            targetArray(right) = targetArray(left)
            right = right - 1
        End If
    Wend
    targetArray(left) = pivot
    pivot = left
    left = l_hold
    right = r_hold
    If left < pivot Then
        Call q_sort(targetArray, left, pivot - 1)
    End If
    If right > pivot Then
        Call q_sort(targetArray, pivot + 1, right)
    End If
End Sub