博客列表 >希尔排序

希尔排序

子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong
子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong原创
2017年11月08日 13:14:201064浏览

如果了解希尔排序之前,了解一下插入排序那么对理解希尔排序是非常有好处的,希尔排序的要点是在排序的时候对所排序列分组,在比较两个元素大小的时候,比较的是两个距离为组距的两个位置的元素,整个过程中组距会递减,直到最后组距为1时,对整个序列执行一次插入排序。

希尔排序之所以快的原因是:一次希尔排序可以消灭更多个逆序对(相比冒泡排序),而在基本有序之后,也就是组距为1的时候,希尔排序实际上执行的是插入排序,而插入排序在序列基本有序的情况下是性能很出色的算法。

function shell(arr){
    let len = arr.length, gap = Math.floor(len/2), 
        i, j, tmp;
    while(gap > 0){
        for(i = gap; i < len; i++){
            tmp = arr[i];            
            for( j = i - gap;j >= 0 && tmp < arr[j]; j = j - gap){
                arr[j+gap] = arr[j];              
            }
            arr[j + gap] = tmp;
        }
        gap = Math.floor(gap/2);
    }
    return arr;
}

事实上关于希尔排序的gap,也就是间隔的取法有很多种研究,而且希尔排序的时间复杂度分析也是一个比较高深的数学问题,在此我就不打算去深入了解了。

上一条:解析tpshop笛卡尔积下一条:test
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议