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