登录  /  注册
博主信息
博文 82
粉丝 0
评论 1
访问量 125609
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
希尔排序
子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong
原创
1271人浏览过

如果了解希尔排序之前,了解一下插入排序那么对理解希尔排序是非常有好处的,希尔排序的要点是在排序的时候对所排序列分组,在比较两个元素大小的时候,比较的是两个距离为组距的两个位置的元素,整个过程中组距会递减,直到最后组距为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,也就是间隔的取法有很多种研究,而且希尔排序的时间复杂度分析也是一个比较高深的数学问题,在此我就不打算去深入了解了。

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学