当前位置: 首页 > news >正文

如果网站打开非常缓慢国内全屋定制十大名牌

如果网站打开非常缓慢,国内全屋定制十大名牌,php 网站开发框架ap,大理州城乡建设局网站希尔排序:高效插入排序的进阶之道基本概念工作原理增量序列的选择实现分析基本概念 希尔排序(Shell Sort)是插入排序的改进版本,由计算机科学家唐纳德・希尔(Donald Shell)于 1959 年提出。它通过引入「增…

希尔排序:高效插入排序的进阶之道

  • 基本概念
  • 工作原理
  • 增量序列的选择
  • 实现
  • 分析

基本概念

希尔排序(Shell Sort)是插入排序的改进版本,由计算机科学家唐纳德・希尔(Donald Shell)于 1959 年提出。它通过引入「增量序列」的概念,打破了插入排序 “只能相邻元素交换” 的限制,大幅提升排序效率,尤其适合中等规模的数组排序。

与普通插入排序(仅能交换相邻元素)不同,希尔排序先通过 较大的间隔(增量) 对元素 “分组排序”,逐步缩小间隔,最终在间隔为 1 时退化为普通插入排序(此时数组已接近有序,插入排序效率最优)。

工作原理

以该数组为例
在这里插入图片描述

  • 选择合适的增量序列
    确认其为递减的,我通常设置为 gap = n/3+1。该数组中,第一次的 增量序列为3,所以后续我就以gap=3为例讲解过程

  • 根据增量序列分组
    这一步就是希尔排序的核心,我把间隔为三的元素分为一组,上述数组分组后如下图所示在这里插入图片描述
    至此数组被分为三组:[64,12,90],[34,22],[25,11],后面我简称其为增序数组

  • 依次进行插入排序
    我在排序算法入门:直接插入排序详解一文中详细介绍了插入排序,如果你尚不清楚可以参考这篇文章。这里我还是模拟一次详细过程帮你理解:
    我们用变量end表示有序区的最后一个元素,end+gap表示同组增序数组的元素
    在这里插入图片描述
    通过逻辑比较,关注end的位置,如其超出数组了代表达到数组头部。在这里插入图片描述
    你需要了解直接插入排序才能理解上述过程,因为二者没有区别。

  • 缩小增量重复过程
    缩小gap的值,直到gap==1时,其就是完全的直接插入排序

增量序列的选择

增量序列的选择有很多,不同的选择会产生不同的时间复杂度,我给出我用过的几种:

  • 希尔最初的增量序列
    规则:gap = n / 2,每次循环 gap /= 2(如 n=10 时,增量为 5, 2, 1)。
    最易理解,但效率不是最优,时间复杂度约为 O(n^2)
  • Knuth 增量序列
    由公式 gap = 3 * gap + 1 生成
    使时间复杂度优化至约O(n^1.5),是实践中较常用的序列。
  • Sedgewick 增量序列
    结合两种模式的序列:D=9∗4^i - 9∗2^i +1 或 4i−3∗2^i+1
    理论上时间复杂度接近O(n^1.3)

实现

void ShellSort(int arr[], int n)
{int gap = n;while (gap > 1) // 直到 gap==1 时,为直接插入排序{gap = gap / 3 + 1; // 修改增量序列for (int i = 0; i < n - gap; i++){	int end = i;int tmp = arr[end + gap];while (end >= 0){if (arr[end] > tmp){arr[end + gap] = arr[end];end -= gap;}else{break;}}arr[end + gap] = tmp;}}
}

分析

希尔排序是不稳定排序(相同元素的相对位置可能因 “分组排序” 改变),但平均效率优于普通插入排序。

http://www.dtcms.com/a/600560.html

相关文章:

  • 【操作系统】详解 分页与分段系统存储管理
  • flex:1
  • 【LeetCode经典题解】递归破解对称二叉树之谜
  • 电脑已连接网络无线自动重启
  • 创建Vue2和Vue3项目区别对比和对应示例演示
  • 《算法闯关指南:优选算法--位运算》--38.消失的两个数字
  • 建设银行网站背景图片wordpress 读写分离
  • 最简单的网站建设语音wordpress首页弹窗你
  • 哪里有建设哪里有我们wordpress如何做优化
  • Spring Boot 2.7.18(最终 2.x 系列版本)8 - 日志:Log4j2 基本概念;Log4j2 多环境日志配置策略
  • Vue 列表渲染完全指南:v-for 核心用法、key 原理及数据监测实战(附代码案例)
  • webrtc降噪-PriorSignalModelEstimator类源码分析与算法原理
  • 如何在电商上购物网站企业咨询管理是干嘛的
  • 重庆大型的网站建设企业社交网站定制
  • 门户网站设计运城市网站建设公司
  • 网站 公司备案与个人备案如何用群晖做自己的网站
  • 商务网站建设实训报告1500字炫酷文字制作网站
  • 给你一个网站你怎么做的网站建设的风格
  • 手机网站和微信网站有哪些opensearch wordpress
  • 餐饮公司网站建设的特点中山网站建设的公司
  • 青岛网站设计多少钱苏州工业园区两学一做教育网站
  • 做网站的备案外包服务公司排名
  • 做网站淮南请人开发一个app要多少钱
  • 个人做论坛网站需要哪些备案.net 企业网站源码
  • 广州手机网站定制信息一个app软件
  • 做网站莱芜短视频推广引流方案
  • 建一个商城网站需要多久小程序游戏排行榜2023
  • 购物网站单页模板新媒体如何运营推广
  • 小说盗版网站怎么做郑州seo招聘
  • 网站建设规划模板内江如何做百度的网站