前端算法之希尔排序

1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。

4.1 算法描述

先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:

  • 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;

  • 按增量序列个数k,对序列进行k 趟排序;

  • 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

function shellSort(arr) {
 
 
    var len = arr.length,
 
 
        temp,
 
 
        gap = 1;
 
 
    while (gap < len / 3) {         // 动态定义间隔序列
 
 
        gap = gap * 3 + 1;
 
 
    }
 
 
    for (gap; gap > 0; gap = Math.floor(gap / 3)) {
 
 
        for (var i = gap; i < len; i++) {
 
 
            temp = arr[i];
 
 
            for (var j = i-gap; j > 0 && arr[j]> temp; j-=gap) {
 
 
                arr[j + gap] = arr[j];
 
 
            }
 
 
            arr[j + gap] = temp;
 
 
        }
 
 
    }
 
 
    return arr;
 
 
}

相关推荐

  1. 前端算法排序

    2024-03-13 04:06:01       40 阅读
  2. C#算法排序

    2024-03-13 04:06:01       39 阅读
  3. 排序算法——排序

    2024-03-13 04:06:01       70 阅读
  4. 排序算法排序

    2024-03-13 04:06:01       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 04:06:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 04:06:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 04:06:01       87 阅读
  4. Python语言-面向对象

    2024-03-13 04:06:01       96 阅读

热门阅读

  1. ImportError: cannot import name ‘URL’ from ‘sqlalchemy’

    2024-03-13 04:06:01       43 阅读
  2. Linux:安装docker并修改其目录

    2024-03-13 04:06:01       34 阅读
  3. 安卓 修改系统时间

    2024-03-13 04:06:01       38 阅读
  4. `PF_NETLINK` 是用于与内核通信的Socket族之一

    2024-03-13 04:06:01       41 阅读
  5. effective c++ 笔记 条款49-52

    2024-03-13 04:06:01       36 阅读
  6. 【笔记】道路不平度的功率谱密度计算时的问题

    2024-03-13 04:06:01       42 阅读
  7. MogDB/openGauss关于PL/SQL匿名块调用测试

    2024-03-13 04:06:01       38 阅读
  8. 从菜鸟到大师细看程序员的五种层次

    2024-03-13 04:06:01       40 阅读
  9. 抓包是什么?我们为什么要抓包?

    2024-03-13 04:06:01       39 阅读