QuickSort – Sort Arrays using the QuickSort Algorithm

' QuickSort an array of any type' QuickSort is especially convenient with large arrays (>1,000' items) that contains items in random order. Its performance' quickly degrades if the array is already almost sorted. (There are' variations of the QuickSort algorithm that work good with ' nearly-sorted arrays, though, but this routine doesn't use them.)'' NUMELS is the index of the last item to be sorted, and is' useful if the array is only partially filled.'' Works with any kind of array, except UDTs and fixed-length' strings, and including objects if your are sorting on their' default property. String are sorted in case-sensitive mode.'' You can write faster procedures if you modify the first two lines' to account for a specific data type, eg.' Sub QuickSortS(arr() As Single, Optional numEls As Variant,'  '     Optional descending As Boolean)'   Dim value As Single, temp As SingleSub QuickSort(arr As Variant, Optional numEls As Variant, _    Optional descending As Boolean)    Dim value As Variant, temp As Variant    Dim sp As Integer    Dim leftStk(32) As Long, rightStk(32) As Long    Dim leftNdx As Long, rightNdx As Long    Dim i As Long, j As Long    ' account for optional arguments    If IsMissing(numEls) Then numEls = UBound(arr)    ' init pointers    leftNdx = LBound(arr)    rightNdx = numEls    ' init stack    sp = 1    leftStk(sp) = leftNdx    rightStk(sp) = rightNdx    Do        If rightNdx > leftNdx Then            value = arr(rightNdx)            i = leftNdx - 1            j = rightNdx            ' find the pivot item            If descending Then                Do                    Do: i = i + 1: Loop Until arr(i) <= value                    Do: j = j - 1: Loop Until j = leftNdx Or arr(j) >= value                    temp = arr(i)                    arr(i) = arr(j)                    arr(j) = temp                Loop Until j <= i            Else                Do                    Do: i = i + 1: Loop Until arr(i) >= value                    Do: j = j - 1: Loop Until j = leftNdx Or arr(j) <= value                    temp = arr(i)                    arr(i) = arr(j)                    arr(j) = temp                Loop Until j <= i            End If            ' swap found items            temp = arr(j)            arr(j) = arr(i)            arr(i) = arr(rightNdx)            arr(rightNdx) = temp            ' push on the stack the pair of pointers that differ most            sp = sp + 1            If (i - leftNdx) > (rightNdx - i) Then                leftStk(sp) = leftNdx                rightStk(sp) = i - 1                leftNdx = i + 1            Else                leftStk(sp) = i + 1                rightStk(sp) = rightNdx                rightNdx = i - 1            End If        Else            ' pop a new pair of pointers off the stacks            leftNdx = leftStk(sp)            rightNdx = rightStk(sp)            sp = sp - 1            If sp = 0 Then Exit Do        End If    LoopEnd Sub

Share the Post:
Share on facebook
Share on twitter
Share on linkedin


The Latest

Top 5 B2B SaaS Marketing Agencies for 2023

In recent years, the software-as-a-service (SaaS) sector has experienced exponential growth as more and more companies choose cloud-based solutions. Any SaaS company hoping to stay ahead of the curve in this quickly changing industry needs to invest in effective marketing. So selecting the best marketing agency can mean the difference

technology leadership

Why the World Needs More Technology Leadership

As a fact, technology has touched every single aspect of our lives. And there are some technology giants in today’s world which have been frequently opined to have a strong influence on recent overall technological influence. Moreover, those tech giants have popular technology leaders leading the companies toward achieving greatness.

iOS app development

The Future of iOS App Development: Trends to Watch

When it launched in 2008, the Apple App Store only had 500 apps available. By the first quarter of 2022, the store had about 2.18 million iOS-exclusive apps. Average monthly app releases for the platform reached 34,000 in the first half of 2022, indicating rapid growth in iOS app development.