NoNdxShSort



Sub ShellSort(arr As Variant, Optional lastEl As Variant, _
Optional descending As Boolean)
Dim value As Variant
Dim index As Long, index2 As Long
Dim firstEl As Long
Dim distance As Long
Dim numEls As Long

' account for optional arguments

If IsMissing(lastEl) Then lastEl = UBound(arr)
firstEl = LBound(arr)

numEls = lastEl - firstEl + 1
' find the best value for distance

Do
distance = distance * 3 + 1
Loop Until distance > numEls

Do
distance = distance \ 3
For index = distance + firstEl To lastEl
value = arr(index)
index2 = index
Do While (arr(index2 - distance) > value) Xor descending
arr(index2) = arr(index2 - distance)
index2 = index2 - distance
If index2 - distance < firstEl Then Exit Do
Loop
arr(index2) = value
Next
Loop Until distance = 1
End Sub



(nondxshsort.html)- by Paolo Puglisi - Modifica del 25/3/2019