用Python实现基本排序算法04——Shell排序

2026具身智能入门全路线:机器人基础+ROS2+仿真实战 人工智能与机器人技术的深度融合,正推动具身智能成为产业升级的关键方向。具身智能的核心在于感知、决策与控制构成的一体化闭环,而工程落地离不开高效的通信中间件与可靠的验证环境。ROS2作为当前机器人开发的事实标准,通过Topic、Service、Action三种通信机制,解决了多传感器协同与实时控制的问题;配合Gazebo等仿真平台,开发者无需依赖昂贵硬件,即可低成本验证导航、抓取等复杂算法,大幅缩短从理论到实践的距离。无论是移动机器人SLAM建图、机械臂视觉操作,还是大模型驱动的任务规划,仿真环境都提供了安全 阅读详情

一、Shell排序的思路

        Shell排序实质上是一种优化的插入排序。D.L.Shell在研究后发现,插入排序存在以下规律:

        1>在元素基本有序时效率较高,

        2>在序列规模较小时效率较高

        为了充分利用这个两个规律,Shell排序的思路是:

a>设定步长,每隔一段距离取一个数,将原来需要排序的序列变成几个较小的部分(姑且称之为子串吧),这样就可以满足2>的条件。

b>将每个子串各自排序

c>减小步长,形成新的子串。此时的子串虽然包含更多地元素,但由于经过b>步骤的排序,此时各部分已基本有序,故满足了1>的设定

d>逐次减小步长,最后进行一次步长为1的排序(也即正常的插入排序),但此时整个串已经基本有序,交换次数不会太多,效率会很高。


二、程序实现

在具体实现时步长(Step)的取法并不固定,在数据量较大时不同的Step取法将带来不同的优化效果(根据网上的说法,PosPro未做研究)。

这里仅仅为了说明算法实现的思路,Step取4,2,1,按照从小到大排列。

#20150901 by PosPro
# http://blog.youkuaiyun.com/pospro
def shellSort(alist):
	step=4		#初始步长采用4
	while step>=1:  #step=1时就是最后一次排序
		for i in range(step): # i=0,1,...step-1, 恰好是每一个子串起始值所在位置
			shellSortCore(alist, i, step)
		print 'Num in every %d positon has been sorted'%step  #动态显示之用
		step=step//2


def shellSortCore(alist, startpos, step):
	#这个函数其实就是实现了一个step版的插入算法,
	#不熟悉插入算法的话,可以看前一篇博客:http://blog.youkuaiyun.com/pospro/article/details/48091893
	n=len(alist)  #记录alist的长度
	idx=startpos+step  #idx恰好是未排序子串中第一个元素的位置
	while idx<n:
		val=alist[idx]  #待插入的值,也即未排序子串中第一个元素的值
		newpos=idx      #待插入值得位置,初始值为排在有序子串的最后
		while alist[newpos-step]>val and newpos>startpos: #若待插入位置不合适,则通过平移,继续寻找
			alist[newpos]=alist[newpos-step] #注意这里所有位置的增减都是针对步长值操作的
			newpos-=step
		alist[newpos]=val #退出循环后,newpos指示的就是val该放置的位置
		idx+=step
	print alist  #仅为动态显示过程之用

三、测试用例和输出

可使用以下代码对算法进行测试:

list1=[9,8,11,3,4,10,6,0,2,1,7,5]
print list1
shellSort(list1)
print list1

输出结果如下,仔细分析一下,就可以体会出Shell算法的处理过程。





普通人5步本地部署Codex:绕过ChatGPT封装直用代码生成本体 Codex是OpenAI专为编程任务优化的代码生成模型,基于GPT-3在数十亿行开源代码上微调而成,具备对Python、JavaScript、SQL等20+语言的语法与运行时逻辑深度理解能力。其核心价值在于低延迟、可调控的本地化推理——支持temperature、max_tokens等关键参数调节,兼容RAG增强与私有代码库分析。相比ChatGPT通用接口,Codex更适配IDE上下文补全、CI/CD脚本修复、自动化脚本生成等工程场景。本文聚焦Windows(WSL2)与macOS(ARM64/Intel) 阅读详情

相关推荐

Deepseek V4代码大模型实战指南:API接入、编辑器集成与本地部署

代码大模型作为人工智能在编程领域的重要应用,通过深度学习技术理解代码语义和编程逻辑。其核心原理是基于Transformer架构的海量代码数据训练,能够根据自然语言描述生成高质量的代码片段。在技术价值层面,代码大模型显著提升了开发效率,减少了重复性编码工作,支持多种编程语言和开发场景。Deepseek V4作为当前热门的代码大模型,具备128K上下文长度和强大的代码生成能力,支持API调用、编辑器集成和本地部署等多种应用方式。通过详细的API配置、Cursor编辑器接入和VSCode插件集成等实战方案,开发者

weixin_30907935的博客 376

Python Shell排序

Shell排序属于插入排序,  增量为1的Shell排序就是直接插入排序 设增量用h表示,Shell排序就是 将数组分为k = (len-1)/h组, 每组为i + n*h 序列 (n为整数 , n=[0,k-1],i=[0,k-1] ) 即分成序列: 0,h,2*h...... 1,1+h , 1+ 2*h..... 2, 2 +h,  2 + 2* h... .... i ,...

naruto_Mr的专栏 307

Python:实现shell sort希尔排序算法(附完整源码)

Python:实现shell sort希尔排序算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 485

shell按照时间排序_Python数据结构(七)排序算法 ShellSort

Python数据结构(七)排序算法 ShellSort五、 Shell排序shell排序是很古老的算法了,我记得应该在上世纪60年代就已经有了,是一名叫D.L Shell 的老前辈针对插入排序算法改进而得到的船新版本,也是首批突破 时间复杂度$$O$$($$x^2$$) 的排序算法。关于shellsort算法的时间复杂度有一大堆论文在讨论,为了这一期的技术文章,我看得头都大,最后的实现版本挑了个...

weixin_36050671的博客 617

《Python3案例和总结》-专栏介绍和目录

本专栏专注于Python基础和进阶的系统讲解,逐步深入实际应用场景到python高级特性,让你轻松学会用Python解决各种实际问题。不管是零基础还是有经验的开发,相信都能从本专栏获益。

数据知道的博客 1万+

【信息科学与工程学】【安全领域】第一百四十二篇 零信任网络解决方案中的算法04

对于节点 i, 有功和无功功率平衡方程为: Pi​=Vi​∑j=1N​Vj​(Gij​cosθij​+Bij​sinθij​), Qi​=Vi​∑j=1N​Vj​(Gij​sinθij​−Bij​cosθij​)。下风向某点 (x,y,z)的浓度 C为: C=2πuσy​σz​Q​exp(−2σy2​y2​)[exp(−2σz2​(z−H)2​)+exp(−2σz2​(z+H)2​)], 其中 Q是源强, u是风速, H是有效源高, σy​,σz​是水平和垂直扩散参数。

weixin_49199313的博客 1408

LintCode-整数排序 II

题目描述: 给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 的排序算法。 样例: 给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。 做题思路:这一题同前面一题一样,也是为整数进行升序排序,但不同的是时间复杂度变了,而sort函数不仅符合上一题的要求,更符合这一题的要求,因为sort函数的时间复杂度正好是 O(n 

yaomf的博客 285

基于Python实现的K-Shell节点排序算法

基于python-2.7实现的K-Shell节点排序算法,算法结果输出每个节点K值。

实现快速排序的算法_排序算法——快速排序、归并排序与堆排序

1. 问题简介从文本文件input-data.txt获取数据,并分别使用快速、归并及堆排序来对数据进行排序,然后将排序后的数据写入文本文件output-data.txt中。23, 34, 15, 19, 56, 57, 9 注:为进行区分,我们将从input-data.txt获取数据,分别使用快速、归并及堆排序进行排序后写入至文件output1-data.txt、output2-data.txt、...

weixin_39720181的博客 398

AI量化投资开源平台——Qlib(微矿)的学习使用笔记(随缘更新)

Qlib 涵盖了量化投资的全过程,为用户的 AI 算法提供了高性能的底层基础架构,从框架设计上让用户可以更容易地应用 AI 算法来辅助解决量化投资的各个关键问题(例如 Alpha 预测,风险预测,市场动态性建模)。本文旨在记录一些面向初学者的基础内容。

in_void的博客 3133

Aspen Plus下载教程Aspen Plus V14 保姆级安装步骤(附安装包)

26、在WlmAdmin界面中,依次点击【Subnet Servers】、【admin】、【Add Feature】、【From a File】、【To Server and its File】。35、在产品选择页面,勾选需要安装的所有产品(重要:不要勾选【Aspen Online(Plant Data)】),然后点击【File Location】。回到桌面,点击任务栏的【开始菜单】,在【所有应用】中找到【Aspen Plus V14】软件图标,将其拖到桌面上创建快捷方式。9、这里可以更改软件的安装位置。

ps_xiaowang的博客 1万+

希尔排序原理与优化实践:从分组策略到增量序列选择

排序算法是计算机科学的基础核心,其中希尔排序作为插入排序的优化版本,通过分组策略实现了时间复杂度突破。其核心原理采用增量序列(gap sequence)将元素分阶段排序,先大跨度调整位置,再逐步细化。这种分治思想使平均时间复杂度降至O(n^1.5),在嵌入式系统等内存受限场景具有工程价值。优化关键在于增量序列选择,如Sedgewick序列可提升30%性能。典型应用包括游戏粒子系统排序、数据库中间结果处理等需要平衡性能与资源占用的场景。希尔排序体现的由粗到精处理思想,也影响了快速排序、TimSort等现代算法

weixin_30600197的博客 421

微信内置浏览器抓包全攻略:从ADB配置到Chrome调试(附常见问题解决)

本文提供了一套完整的微信内置浏览器抓包与调试解决方案。从ADB工具的深度配置与稳定性连接开始,详细讲解了如何开启X5内核调试开关,并利用Chrome DevTools建立远程连接。文章重点剖析了Network面板进行网络请求抓取、性能分析和问题定位的实战技巧,并附带了设备连接失败、无网络请求等常见问题的排查指南,帮助开发者高效解决微信H5页面调试难题。

gitlab7runner的博客 541

2019-09-11 博客热门文章

浏览 GitHub 太卡了?教你两招! _江南一点雨 2019年09月04日 10:22:37 阅读数 13719 9月10日科技资讯|马云卸任阿里巴巴董事局主席;苹果承认违法中国劳动法;IntelliJ IDEA 2019.2.2 发布​ 科技新闻搬砖 2019年09月10日 09:47:03 阅读数 2043 shell-编写shell脚本所需的基础语法 yoylee_web ...

漫漫人生路 3892

ChatGPT Windows桌面版:从安全下载到高效配置的全流程指南

WebView封装技术是将网页应用转化为独立桌面程序的核心方法,它通过嵌入浏览器内核实现跨平台功能复用。其原理在于利用Electron或Tauri等框架,将Web内容打包进原生应用外壳,同时注入系统级API调用能力。这项技术的工程价值在于显著提升了Web应用的系统集成度和用户体验,使其能够支持全局快捷键、独立进程和本地数据存储等原生特性。在AI助手深度集成工作流的应用场景中,这种封装模式解决了浏览器多标签页切换繁琐、会话管理不便等痛点。本文以ChatGPT桌面客户端为例,详细解析了基于开源项目的安全下载路径

weixin_30437847的博客 480

Python-OpenCV及cv2,numpy库最新安装教程[最全步骤]

安装教程目录前言OpenCV-Python安装教程报错解决cv2安装numpy安装opencv安装(附加)总结 前言 首先,我知道一些看到我的Blog的人已经在网上找了很多歪路子,现在已经火冒三丈了(我也是这样过来的hhhh),那么现在,深呼吸,跟着我的教程,不要着急,每一步都要读一遍。完整安装过程需要1个小时左右(仅供参考,本人第一次安装python花了一天(确信)) OpenCV-Python...

qq_45425286的博客 7430

每周博文精选 第37周

【Linux】一步一步学Linux系列教程汇总(更新中…) 沧海一笑-dj 2019年07月04日 23:57:03 阅读数 23366 2019年9月全国程序员工资统计 有数可据 2019年09月05日 09:26:25 阅读数 23421 程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略 beyondma 2019年09月07日 16:...

漫漫人生路 7533

S905L3B机顶盒刷Armbian:从安卓Root到eMMC全攻略

在嵌入式开发与轻量级服务器搭建中,ARM架构设备因其低功耗和高性价比备受关注。晶晨S905L3B作为运营商机顶盒的主流芯片,通过刷写Armbian系统可将其改造为ARM小服务器。其原理是利用Amlogic芯片的uboot引导机制,将Linux系统写入eMMC存储,从而脱离原厂安卓限制。这一方案的技术价值在于以极低成本实现Docker容器、下载机、轻量数据库等服务的部署,应用场景涵盖家庭网络广告过滤、智能家居控制、复古游戏机等。本文以CM311-1S为例,详细拆解从安卓9 Root到Armbian写入eMMC

weixin_31476015的博客 339

Python选手必看:蓝桥杯Python组(大学B/C组)从报名到拿奖的保姆级攻略

本文为Python选手提供蓝桥杯Python组(大学B/C组)从报名到拿奖的保姆级攻略,涵盖组别选择、备赛策略、实战技巧和考场经验。特别针对非重点院校学生,分享Python 3.8.6环境下的高效编码技巧、Excel解题妙招以及精准的备赛计划,帮助选手避开常见陷阱,提升获奖概率。

weixin_30765505的博客 464

PINN物理信息网络 | 非线性薛定谔方程的物理信息神经网络

PINN物理信息网络 | 非线性薛定谔方程的物理信息神经网络

算法如诗的博客 1298

eCognition易康操作教程(一):如何利用eCognition易康软件进行影像分割之棋盘分割、四叉树分割、光谱差异分割

进程执行完成后,植被覆盖区域与裸地区域合并了。第三步:清除分割结果,点击“Image Objects”菜单栏,点击“Delete Level(s)”,选中“ResultLevel1”,点击”ok”删除棋盘分割结果。四叉树分割之后,有的正方形大一些,有的正方形小一些,大说明该区域的光谱特性更加均一,而小说明不太均一。Leve:选择运行算法的矢量层名称,这里选择四叉树分割算法得到的矢量层“ResultLevel2”。Image Layer weights:图层权重,这里设置为“1,1,1,1”。

蒹葭苍苍 4608

NetworkX 历史发布日志深度解析:从 0.22 到 2.5 的演进脉络与关键技术变更

> 本指南以 `doc/release/old_release_log.rst` 为骨架,系统梳理 NetworkX 从 2005 年的 0.22 到 2020 年的 2.5 共二十余个版本的核心特性、Python 支持范围、API 破坏性变更与重要 Bug 修复。读者可借此理解该 Python 图分析库的架构演化主线——包括图数据结构从 XGraph 到 Graph/MultiGraph 的迁移

gitblog_00366的博客 479

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

想从事DBA工作,该挑选哪一款数据库产品

知乎问这原题: 现在主流数据库有很多,作为一个学生以后想从事dba的工作,应该学哪一种呢? 标题修改为:想从事DBA工作,该如何挑选一款数据库产品 mysqlops回答: 不管你想选择哪种数据库产品,有些基础理论知识必须打扎实,尤其是:数据库系统概论、Linux操作系统、SQL标准语言、数据结构(重点排序算法)、开发语言(至少懂几款脚本语言,SHELL必须要会,其次最好能再掌握...

系统 运维 438

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Workbuddy 与微信小程序安全集成实战指南

微信小程序是当前最普及的轻量级前端入口,其标准化 API 和严格的安全沙箱为第三方服务提供了合规的对接通道;Webhook 作为一种松耦合、事件驱动的通信机制,天然适配本地化 AI 工具(如 Workbuddy)的隐私优先架构。二者结合,既规避了个人微信协议逆向的法律与封号风险,又实现了 IDE 内代码智能能力向日常沟通场景的延伸。该模式已广泛应用于开发者提效工具链中,典型落地包括错误日志自动分析、SQL 优化建议推送、正则表达式生成等 Skill 场景,核心价值在于‘数据不出域、控制在本地、交互在微信’。

weixin_34327223的博客 319

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Claude Code CLI:终端驱动的全栈故障诊断新范式

在现代软件开发中,技术问题的本质日益从语法错误转向跨层因果链断裂——涉及终端行为、系统调用、内核参数、硬件约束与配置兼容性。Claude Code并非传统AI编程助手,其核心能力源于对Unix哲学工具链(如strace、tail、kubectl)的原生集成与深度语义理解,尤其在CLI模式下可实时关联异构日志、解析procmon/strace原始输出、校验注册表与sysctl配置,实现从现象到根因的可验证推理。它重构了SRE与开发者的问题定位路径:不再依赖GUI界面或IDE上下文,而是以纯文本终端为统一入口,

weixin_33801856的博客 405
上一篇: 用Python实现基本排序算法03——插入排序
下一篇: 利用Python写的展示汉诺塔(hanoi)解法的小程序_Prj003
PosPro
博客等级 码龄12年 28粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值