Python实现希尔排序算法并附带原理图解

shell排序算法是插入排序算法的强化版本。算法将原始集合分解为更小的子集,然后使用插入排序对每个子集进行排序。

Shell排序算法中可以使用的最佳序列

原始序列:N/2,N/4,…,1

诺斯增量序列:1,4,13,…,(3k–1)/2

Sedgewic增量序列:1,8,23,77,281,1073,4193,16577...4j+1+3·2j+1

Hibbard增量序列:1,3,7,15,31,63,127,255,511…

Papernov&Stasevich增量序列:1,3,5,9,17,33,65,...

普拉提序列:1,2,3,4,6,9,8,12,18,27,16,24,36,54,81....

Shell排序算法原理

1、以初始数组(如上图)为例,进行排序

2、使用Shell排序算法的原始序列(N/2,N/4,...1)作为算法中的间隔。在第一个循环中,如果数组大小,则比较和互换N=8的元素。

N/2=4,比较第0元素与第4元素。如果第0元素大于第4元素,把第4名元素存储在变量temp中,值更大的元素存储在第4元素的位置,再把变量temp的值存储在第0元素的位置。

在N/2间隔内重新排列所有元素

将所有其余元素继续此过程。

3、在第二个循环中,N/4=8/4=2取一个区间,并再次对位于这些区间的元素进行排序。比较位于N/4间隔的数组中的所有元素。

元素在第4和第2位置进行比较,元素在第2和第0比较。比较阵列中的所有元素都在当前间隔。

4、剩余元素也进行了相同的过程,在N/4间隔内重新排列所有元素。

5、最后,当N/8=8/8=1时,对位于区间1的数组元素进行排序,在N/8间隔内重新排列元素。

Python实现shell排序算法

def shellSort(array,n):
      interval=n//2
    while interval>0:
    for i in range(interval,n):
      temp=array
      j=i
      while j>=interval and array[j-interval]>temp:
            array[j]=array[j-interval]
            j-=interval
      array[j]=temp
      interval//=2

data=[9,8,3,7,5,6,4,1]
size=len(data)
shellSort(data,size)
print('Sorted Array in Ascending Order:')
print(data)

以上就是Python实现希尔排序算法并附带原理图解的详细内容,更多请关注昆居客【www.kunjuke.com】。

相关推荐:

《希尔兰斯战记》宠物合成攻略

希尔兰斯战记宠物怎么合成?在希尔兰斯战记这款游戏里面,魔物就是宠物,这些伙伴可以说是玩家战斗力的重要组成部分了,很多新手玩家刚开始玩的时候,经常会搞不清楚魔物到底要怎么合成,怎么才能让自己的魔物变得更强,其实魔物的合成,主要包括两个方面,一个是用碎片直接做出新的魔物,另外一个就是把已经有的魔物,通过进化的方式,让它变得更厉害,这两种方式,玩法不太一样,但都很重要,掌握好了之后,培养魔物就会轻松很多...

《希尔兰斯战记》SSR宠物一览

希尔兰斯战记SSR宠物有哪些?希尔兰斯战记是一款放置塔防手游,上阵不同的宠物或者说英雄,然后合理安排站位来守住一波又一波的敌袭。那么希尔兰斯战记ssr宠物有哪些呢?这里就给大家着重介绍下里面的一些厉害的SSS级英雄,并按照职业定位给它们做的划分。 《希尔兰斯战记》SSR宠物一览 肉盾:主神之盾、远古支配者、狮心骑士、双头巨人、烹龙大厨 主神之盾-阿尔法,召唤流肉盾角色,普攻单体物伤,技能可以召唤2...

GitHub Copilot逻辑生成演示:如何利用注释引导AI完成复杂的排序算法

三路快排需原地升序排列整数列表,时间复杂度O(n)、空间O(log n),用三指针分区法以arr[0]为pivot,空或单元素直接返回。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 你需要让 GitHub Copilot 生成一个符合特定约束的排序算法,但直接写函数名或模糊描述只会得到通用模板甚至错误实现——必须用结构化注释明确输入输出、...
· AI · 66238

iPhone 17夜拍模式有提升吗 iPhone 17夜景算法升级详情

iPhone 17夜景能力显著提升,源于传感器(1/1.3英寸、f/1.6)、防抖(标准版传感器位移、Pro双防抖)、算法(星空模式2.0、动态光影控制)与A19芯片(AI算力+15%)四维协同,暗光成像亮度+35%、噪点-22%,长曝光更稳、合成更快、多焦段夜摄更优。 有明显提升,而且是传感器、防抖、算法和算力四方面协同进化的结果。 传感器与光圈硬件基础更扎实 主摄传感器尺寸从iPhone 16...

AI生成视频卡顿怎么办?纳逗Pro的算法优化与渲染效率解析

纳逗Pro通过帧间稳定性、多模型协同调度、渲染效率优化三重技术解决AI视频卡顿:首尾帧锚定+轨迹约束提升运动连贯性;分片加载+异步推理+缓存池实现算力高效调度;语义级帧压缩与自适应分辨率降低无效计算,显著提升流畅度与稳定性。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ AI生成视频卡顿,根本不是“运气差”,而是帧与帧之间缺乏物理连续性、运...

CodeBuddy怎么用来做LeetCode算法题的解题和讲解?

CodeBuddy可提升LeetCode解题效率与理解深度:一、导入题目触发智能解析,构建结构化模型;二、获取多解法对比与复杂度标注;三、启用交互式逐行讲解模式。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您希望借助CodeBuddy提升LeetCode算法题的解题效率与理解深度,则可利用其代码理解、多模态提示响应与上下文感知能力,...

AI做食谱图解太麻烦?Nano Banana生成步骤清晰的菜谱【教程】

Nano Banana生成菜谱图解的关键是将“怎么做”转化为清晰描述:一明确步骤式或信息式图解类型;二用完整句子写提示词,含主体动作、步骤逻辑与视觉控制;三保持食材与成品风格一致;四微调间距、标签和尺寸。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 不用折腾复杂提示词,也不用反复调试参数,Nano Banana 生成菜谱图解的关键,在于把...
· AI · 136008

CodeBuddy能帮忙优化算法性能吗?

CodeBuddy通过五种方法优化算法性能:一、编码期实时预警与自动改写;二、KMP等经典算法语义级重构;三、Spring Boot中SQL与循环的业务级优化;四、本地化KMP压测与调优;五、边缘计算场景下的分布式适配。 如果您在开发过程中发现算法执行缓慢、资源占用过高或响应延迟明显,则可能是由于算法时间复杂度不合理、存在冗余计算或未利用缓存机制。以下是codebuddy优化算法性能的多种方法: ...