通过缩小增量的方式不断的进行插入排序
    算法流程:
    1、选取一个间隔数k对于间隔nk为一组的所有数进行分组
    2、对每一组进行插入排序
    3、不断缩小间隔k,重复第*2
    步的操作直到k等于1

    代码
    **

    1. function ShellSort(arr){
    2. let n = arr.length
    3. for (let k = n / 2 | 0; k >= 1; k >>= 1) {
    4. for (let i = 0; i < n; i += k) {
    5. let j = i
    6. while(j - k >= 0 && arr[j] < arr[j - k]){
    7. swap(arr, j - k, j)
    8. j -= k
    9. }
    10. }
    11. }
    12. return arr
    13. }

    时间复杂度(O(nlogn))
    空间复杂度(O(1))