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

快速排序

快速排序

实现步骤:

  1. 右指针往左找,找到一个<=枢轴值的值时停下

  2. 左指针往右找,找打一个>枢轴值的值时停下

  3. 判断左右指针是否重合:

    • 未重合:将左右指针指向的值互换,继续重复步骤1
    • 重合:将枢轴值与重合点的值互换,结束。

执行完一次上述步骤后,枢轴值被排序到正确位置,此时数组呈现:

  • 枢轴值左边的值全部<=枢轴值
  • 枢轴值右边的值全部>枢轴值

接下来,把对左右两部分的值进行同样的操作,递归结束后,即可即可实现将数组排序。

递归的结束条件:

  • 子数组为空
  • 或枢轴值等于右指针(子数组只有一个值)

实现代码:

def partition(ls, left, right):"""划分实现枢轴值左边<=它,右边>它"""# 注意python中函数参数传递的是引用,在函数内修改列表,外面的列表也会变# 所以只需要将枢轴值的位置返回即可# 枢轴值pivot = leftwhile left != right:# 右指针左移,寻找一个小于等于pivot的值while (left < right) and (ls[right] > ls[pivot]):right -= 1# 左指针右移,寻找一个大于pivot的值while (left < right) and (ls[left] <= ls[pivot]):left += 1if left < right:# 左右指针没有相遇# 将左右指针的值交换,继续移动ls[left], ls[right] = ls[right], ls[left]# 当左右指针相遇时,将枢轴值与交汇点交换if pivot != left:# 将枢轴值与相遇点交换,实现枢轴值左边<=ta,右边>tals[pivot], ls[left] = ls[left], ls[pivot]# 返回枢轴值位置return leftdef quick_sort(ls, left, right):""" 快速排序 """if left > right:# 当子数组为空或只有一个值时,结束递归return# 移动左右指针,使枢轴值左边<=它,右边>它pivot = partition(ls, left, right)# 继续对左边数组和右边数组进行快速排序quick_sort(ls, left, pivot - 1)quick_sort(ls, pivot + 1, right)

需要注意的是,python中对函数参数的传递时引用传递,所以函数内部对列表的操作会直接影响外面的列表,所以在进行递归以及划分时,不需要将改变后的数组返回。

另一种实现方法(非原地排序):

def quick_sort2(ls):""" 快速排序 """if len(ls) < 2:# 递归结束条件,空数组或只有一个值的数组时有序的return lspivot = ls[0]# 获取小于等于枢轴值的数组成的数组less_ls = [i for i in ls[1:] if i <= pivot]greater_ls = [i for i in ls[1:] if i> pivot]return less_ls + [pivot] + greater_ls

image

值得一提的是,第二种方法比第一种方法运行时间更短,虽然它创造了新的列表,空间占用较大,但更具AI的解释,第二种方法使用的是列表推导式,列表推导式底层是C实现的,速度很快,而第一中方法中涉及较多的if判读以及元素交换,所以速度慢。

http://www.jsqmd.com/news/129441/

相关文章:

  • Open-AutoGLM性能优化秘籍:提升响应速度3倍的8项核心技术实践
  • 真空包装袋十大品牌口碑榜,实力厂家深度解析,真空包装袋直销厂家选哪家技术领航者深度解析 - 品牌推荐师
  • 基于anything-llm镜像的技术支持知识中枢建设
  • 一篇搞定 dotnet ef:EF Core 常用命令与实战指南
  • 北航硕士亲授大模型学习路线图:从原理到开发,拿下86W+高薪offer必备资源
  • USB协议基础与libusb结合学习:图解说明
  • 2025年年终类似Jira的工具推荐:聚焦中大型团队的5款高口碑工具横向评测与榜单 - 十大品牌推荐
  • 整理项目规范文档
  • 揭秘Open-AutoGLM本地化部署:如何3步实现企业级模型服务上线
  • 【智谱清言Open-AutoGLM插件深度解析】:掌握AI自动化编程的未来利器
  • Batocera游戏整合包新手常见错误及解决方案汇总
  • 探究大数据领域分布式存储的优势与挑战
  • 2025年热门的家用圆形电梯/圆形电梯优质厂家推荐榜单 - 品牌宣传支持者
  • 【AI代理时代已来】:用智普清言 Open-AutoGLM 全面接管你的PC工作流
  • 2025年热门的斜轨数控车床厂家推荐及采购指南 - 品牌宣传支持者
  • 2025 HR行业大变局?这些趋势直接决定你的职业上限
  • 2025 重庆诊所装修优选:佐森装饰,诊所装修/厂房装修/餐厅装修品质标杆 - 深度智识库
  • 【2026必看】大模型学习路线图:从API调用到模型训练,助你成为AI开发专家(含完整资源)
  • 软考高项(信息系统项目管理师)—第18章 项目绩效域管理全解析
  • Open-AutoGLM本地部署最低硬件要求曝光:3步判断你的设备能否跑通
  • 2025年年终Jira替代软件推荐:聚焦大规模敏捷与安全合规的5强口碑盘点 - 十大品牌推荐
  • Open-AutoGLM官方资源泄露?深度解析真实下载来源(仅限本周开放)
  • 【Open-AutoGLM行业突破】:6大垂直领域智能升级路径曝光
  • 2025年12月压力传感器,熔体压力传感器,气压压力传感器公司推荐:行业测评与选择指南 - 品牌鉴赏师
  • Open-AutoGLM最新版本获取全攻略(稀缺资源+官方直链曝光)
  • 智慧人才APP主要页面展示
  • 2025年污水药剂、洗砂药剂、絮凝剂、PAM厂家权威推荐:蓝淼环保引领水处理药剂行业,五大品牌实力对决 - 深度智识库
  • 汇付支付jspay go代码流程
  • 视觉重塑精度:基于电鱼智能 RK3588 的手术室多屏异显与 8K 视频分发方案
  • 项目绩效域管理 论文框架