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

【Python练习】044. 编写一个函数,实现快速排序算法

044. 编写一个函数,实现快速排序算法

  • 044. 编写一个函数,实现快速排序算法
    • 示例代码
      • 运行结果
      • 代码解释
    • 扩展:原地快速排序
      • 运行结果
      • 代码解释
    • 注意事项
    • 实现方法
      • 基础实现(原地排序)
      • 原地分区实现(更高效)
      • 使用lambda表达式
      • 随机化快速排序
      • 迭代实现

044. 编写一个函数,实现快速排序算法

快速排序是一种高效的排序算法,使用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。

示例代码

def quick_sort(arr):"""快速排序函数。参数:arr (list): 输入数组。"""if len(arr) <= 1:return arr  # 如果数组长度小于等于1,直接返回数组else:pivot = arr[len(arr) // 2]  # 选择中间元素作为基准left = [x for x in arr if x < pivot]  # 小于基准的元素middle = [x for x in arr if x == pivot]  # 等于基准的元素right = [x for x in arr if x > pivot]  # 大于基准的元素return quick_sort(left) + middle + quick_sort(right)  # 递归排序左右子序列并合并# 测试代码
arr = [3, 6, 8, 10, 1, 2, 1]
print("原始数组:", arr)
sorted_arr = quick_sort(arr)
print("排序后的数组:", sorted_arr)

运行结果

运行上述代码后,输出如下:

原始数组: [3, 6, 8, 10, 1, 2, 1]
排序后的数组: [1, 1, 2, 3, 6, 8, 10]

代码解释

基本情况

  • 如果数组长度小于等于 1,直接返回数组,因为长度为 1 的数组已经是有序的。

选择基准

  • 选择数组中间的元素作为基准(pivot)。也可以选择第一个元素、最后一个元素或随机元素作为基准。

划分数组

  • 使用列表推导式将数组分为三部分:

  • left:小于基准的元素。

  • middle:等于基准的元素。

  • right:大于基准的元素。

递归排序

  • 递归地对 leftright 子序列进行快速排序。

  • 最后将排序后的 left 子序列、middle 和排序后的 right 子序列合并。

扩展:原地快速排序

上述实现使用了额外的空间来存储 leftmiddleright 子序列。为了节省空间,可以实现原地快速排序。以下是原地快速排序的实现代码:

def quick_sort_inplace(arr, low, high):
http://www.dtcms.com/a/280397.html

相关文章:

  • 第十三讲 | map和set的使用
  • JavaDemo——使用CGLIB动态代理
  • I3C通信驱动开发注意事项
  • 【雅思播客016】New Year Resolution 新年决心
  • docker搭建freeswitch实现点对点视频,多人视频
  • 极致cms多语言建站|设置主站默认语言与设置后台固定语言为中文
  • 嵌入式学习-PyTorch(4)-day21
  • 多相机depth-rgb图组完整性分拣器_MATLAB实现
  • @[TOC](模拟) # 1.替换所有的问号(easy)
  • 学C++做游戏,先搞懂这些基础要点
  • 《大数据技术原理与应用》实验报告六 Flink编程实践
  • 使用JS编写用户信息采集表单
  • 【Python3-Django】快速掌握DRF:ModelViewSet实战指南
  • OneCode 3.0 从0到1干货——AIGC及MCP注解驱动开发物联网AI决策应用
  • 全新 Python 项目托管到 Gitee 私有仓库完整流程(带详细命令注释)
  • OpenVINO initialization error: Failed to find plugins.xml file
  • uv 使用指导文档
  • 【机器学习深度学习】LoRA 微调详解:大模型时代的高效适配利器
  • BlueLotus XSS管理后台使用指南
  • GeoTools 工厂设计模式
  • 传输协议和消息队列
  • AR眼镜:重塑医学教育,开启智能教学新时代
  • 同步辐射XAFS和XRD协同用于高熵合金的研究应用
  • 香港站群服务器租用:为什么需要选择不同C类IP?
  • python的广东省家庭旅游接待信息管理系统
  • k8s之Attach 和 Mount
  • C++回顾 Day7
  • k8s之Snapshots 详解
  • Linux C IO多路复用
  • 静态补丁脚本 - 修改 libtolua.so