浙江巨鑫建设有限公司网站企业在线培训系统

张小明 2026/3/2 21:30:41
浙江巨鑫建设有限公司网站,企业在线培训系统,成都网站开发团队,石家庄最新招聘信息希尔排序 学习目标#xff1a; 一.希尔排序的思想 二.增量序列 三.复杂度分析 四.希尔排序为什么快#xff1f; 五.强化练习 一.希尔排序的思想 1.将待排序数组按照一定的“间隔”分为多个子数组#xff0c; 每组分别进行“插入排序” 2.逐渐缩小间隔#xff0c;…希尔排序学习目标一.希尔排序的思想二.增量序列三.复杂度分析四.希尔排序为什么快五.强化练习一.希尔排序的思想1.将待排序数组按照一定的“间隔”分为多个子数组每组分别进行“插入排序”2.逐渐缩小间隔进行下一轮排序3.最后一轮时取间隔为1相当于直接使用插入排序但此时经过 [宏观调控] 数组已经基本有序所以此时插入排序只需进行少量交换代码实现publicstaticvoidshellSort(int[]arr){for(intgaparr.length/2;gap0;gap/2){for(intgroupStartIndex0;groupStartIndexgap;groupStartIndex){for(intcurrentIndexgroupStartIndexgap;currentIndexarr.length;currentIndexgap){intcurrentNumberarr[currentIndex];intpreIndexcurrentIndex-gap;while(preIndexgroupStartIndexarr[preIndex]currentNumber){arr[preIndexgap]arr[preIndex];preIndex-gap;}arr[preIndexgap]currentNumber;}}}}目前的思路是根据gap分组处理完一组后调整指针再处理下一组这种思路非常符合人类思维但对于计算机而言它更喜欢从gap开始依次向前将每个数字插入到其对应的组中虽然数字好像在不同组间跳跃但对于计算机就像是在访问一段连续的数组代码优化将第二、三个for循环整合成一个publicstaticvoidshellSort(int[]arr){for(intgaparr.length/2;gap0;gap/2){for(intcurrentIndexgap;currentIndexarr.length;currentIndex){intcurrentNumberarr[currentIndex];intpreIndexcurrentIndex-gap;while(preIndex0arr[preIndex]currentNumber){arr[preIndexgap]arr[preIndex];preIndex-gap;}arr[preIndexgap]currentNumber;}}}二.增量序列1.定义Shell排序中每一遍排序的间隔 ‘gap’ 被称为 “增量” 所有增量组成的序列叫做增量序列也就是上述例子中的’5‘’2‘’1‘增量是依次递减所以Shell排序又称为缩小增量排序增量序列的选择会极大影响Shell排序的效率若没有正确选择增量序列Shell排序效率可能比插入排序更低如图所示在gap 8 , 4 , 2 时无元素交换只有在gap 1时才发挥了作用而此时Shell排序相比插入排序多做了无用功2.一些著名的增量序列(1) Hibbard增量序列Dk 2k- 1 , 也就是 13715… 。数学界猜想它最坏的时间复杂度为O(n3/2) 平均时间复杂度为O(n5/4)(2) Knuth增量序列D1 1; Dk1 3 * Dk 1也就是 141340… 。数学界猜想它的平均时间复杂度为O(n3/2)(3) Sedgewick增量序列151941109… 。这个序列的元素有的是通过 9 * 4k- 9 * 2k 1 计算出来的有的是通过 4k- 3 * 2k 1 计算出来的并将其按照从小到大排列数学界猜想它最坏的时间复杂度为O(n4/3)平均时间复杂度为O(n7/6)3.增量序列示例publicstaticvoidshellSort(int[]arr){//使用Knuth增量序列//先要找出增量序列的最大值intmaxKnuthNum1;//初始化while(maxknuthNum*31arr.length){maxKnuthNummaxknuthNum*31}//把值赋给gap并修改gap变化的规律for(intgapmaxknuthNum;gap0;gap(gap-1)/3){for(intcurrentIndexgap;currentIndexarr.length;currentIndex){intcurrentNumberarr[currentIndex];intpreIndexcurrentIndex-gap;while(preIndex0arr[preIndex]currentNumber){arr[preIndexgap]arr[preIndex];preIndex-gap;}arr[preIndexgap]currentNumber;}}}三.复杂度分析由于增量序列会极大影响Shell排序的效率时间复杂度平均时间复杂度介于O(n)到O(n2)​ 普遍认为最好的时间复杂度为O(n1.3)空间复杂度O(1) 只需要常数级的临时变量四.希尔排序为什么快1.“逆序对”概念引入当我们从小到大排序时在数组中的两个数字如果前面一个数字大于后面的数字则这两个数字组成一个逆序对而所有排序算法的本质都是消除逆序对对于随机的数组逆序对的数量是O(n2)级的如果使用交换相邻元素的方法来消除逆序对每次只能消除一组逆序对所以交换的次数是O(n2)级的这就是冒泡、选择、插入排序算法时间复杂度只能达到O(n2)的原因而基于交换元素的排序算法 ( 空间复杂度为O(1) ) 想突破O(n2)必须通过一些比较交换间隔比较远的元素也就是需要在一次交换中能够消除一个以上的逆序对Shell排序算法就是如此此后的快排、堆排也是如此…五.强化练习506. 相对名次 - 力扣LeetCode杂度为O(1) ) 想突破O(n2)必须通过一些比较交换间隔比较远的元素也就是需要在一次交换中能够消除一个以上的逆序对Shell排序算法就是如此此后的快排、堆排也是如此…五.强化练习506. 相对名次 - 力扣LeetCode912. 排序数组 - 力扣LeetCode
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

唐山网站建设最好的特色食品网站建设策划书

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式安装引导程序,功能包括:1. 分步可视化指引(类似安装向导)2. 实时检测操作是否正确(如PATH配置&#xff0…

张小明 2025/12/31 3:56:28 网站建设

三合一网站制作公司郑州计算机培训机构

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个网页项目,使用Arial Unicode MS字体实现多语言支持。要求:1) 包含中英文双语内容 2) 自动检测用户系统语言并切换对应字体 3) 提供字体回退方案 4) …

张小明 2025/12/31 3:55:44 网站建设

在网站制作完成后网站建设桐乡做网站的公司

DKVideoPlayer性能优化全攻略:预加载与无缝切换技术深度解析 【免费下载链接】DKVideoPlayer Android Video Player. 安卓视频播放器,封装MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音并实现预加载,列表播放,悬浮播放&#xff0c…

张小明 2025/12/31 3:55:48 网站建设

微信网站开发用什么语言深圳网站建设-猴王网络

Windows 7 系统维护全攻略 1. 启动和恢复选项配置 启动和恢复选项可控制 Windows 7 的启动方式以及处理故障的方式。以下是查看和配置这些选项的具体步骤: 1. 点击“开始”→“控制面板”→“系统和安全”→“系统”。 2. 在“系统”控制台中,点击“计算机名、域和工作组…

张小明 2025/12/30 6:30:13 网站建设

品牌公司网站建设成都网站建设优化企业排名

Scan Tailor:专业级扫描图像处理工具完整指南 【免费下载链接】scantailor 项目地址: https://gitcode.com/gh_mirrors/sc/scantailor Scan Tailor是一款功能强大的开源扫描图像后处理工具,专门用于优化扫描文档的质量。无论你是需要处理书籍扫描…

张小明 2026/1/10 23:01:55 网站建设

动易企业网站如何优化关键词提升相关度

你永远可以相信谷歌。上个月刚发布 Gemini 3 Pro,这个月就给你 Flash 版本。几小时前,Gemini 3 Flash 正式上线。如果说 Pro 模型是旗舰,那 Flash 就是真正的主力。它在 Gemini API 里的 token 消耗量是最大的,几百万开发者每天都…

张小明 2025/12/31 4:01:22 网站建设