Shell Sort
Option Explicit
Sub Main()
Dim someArr, x, ArrStr
someArr = Array(31, 25, 12, 22, 11)
Call shellSort(someArr)
For Each x In someArr
ArrStr = ArrStr & x & ", "
Next
ArrStr = Left(ArrStr, Len(ArrStr) - 2)
MsgBox "The Array after Shell Sort is : " & vbCrLf & ArrStr
End Sub
Sub shellSort(numbers)
Dim i, j, increment, temp
increment = 3
While increment > 0
For i = increment To UBound(numbers)
j = i
temp = numbers(i)
Do While j >= increment And numbers(j - increment) > temp
numbers(j) = numbers(j - increment)
j = j - increment
If j < increment Then Exit Do
Loop
numbers(j) = temp
Next
If increment / 2 <> 0 Then
increment = Int(increment / 2)
ElseIf increment = 1 Then
increment = 0
Else
increment = 1
End If
Wend
End Sub