前端算法之希尔排序

简介: 前端算法之希尔排序

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;
 
 
}



目录
相关文章
|
2天前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
4天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
15 1
|
4天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
14 0
|
4天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
12 0
|
2天前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
|
4天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
11 1
|
4天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
7 1
|
4天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
12 1
|
4天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
12 0
|
1天前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战