Sorting algorithms/Shell sort

func shell_sort(a) {
    var h = a.len
    while (h >>= 1) {
        for i in (h .. a.end) {
            var k = a[i]
            for (var j = i; (j >= h) && (k < a[j - h]); j -= h) {
                a[j] = a[j - h]
            }
            a[j] = k
        }
    }
    return a
}

var a = rand(1..100, 10)
say a
shell_sort(a)
say a

Output:

[54, 67, 65, 8, 56, 83, 64, 42, 20, 17]
[8, 17, 20, 42, 54, 56, 64, 65, 67, 83]