Python 快速排序:原理、使用场景与实现方法

简介: 本文主要介绍了Python 快速排序:原理、使用场景与实现方法

引言

快速排序(Quick Sort)是由英国计算机科学家托尼·霍尔于1960年提出的一种高效的排序算法。其主要特点在于采用了分治策略,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

quickSort.gif

一、快速排序原理

  1. 选择基准元素:首先在待排序数组中选取一个基准元素(通常选择第一个或最后一个元素,也可以采用随机选择的方式以提高平均性能)。

  2. 分区操作:重新排列数组,使得基准元素之前的所有元素都不大于它,之后的所有元素都不小于它。这个过程称为分区操作,可以通过两个指针从两端向中间移动,并交换不满足条件的元素位置来完成。

  3. 递归排序:然后分别对基准元素左侧和右侧的子数组进行快速排序,直至所有子数组只有一个元素或者为空。

二、快速排序步骤详解

假设有一个无序数组[5, 3, 8, 6, 7, 2],按照快速排序的过程:

  1. 选择基准元素:我们选择第一个元素5作为基准。
  2. 分区操作
    • 从右向左找到第一个小于基准的元素2,从左向右找到第一个大于基准的元素8,交换它们的位置,得到[2, 3, 5, 6, 7, 8]
    • 继续左右扫描,交换53,得到最终分区结果[2, 3, 5, 6, 7, 8],此时基准元素位于正确位置
  3. 递归排序
    • [2, 3]子数组进行快速排序
    • [6, 7, 8]子数组进行快速排序

三、快速排序代码实现

以下是一个简单的快速排序实现:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr

    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)

# 示例调用
unsorted_array = [5, 3, 8, 6, 7, 2]
sorted_array = quick_sort(unsorted_array)

四、快速排序的使用场景

  • 大规模数据排序:由于快速排序的平均时间复杂度为O(n log n),对于大规模数据排序任务,快速排序具有较高的效率,尤其是在内部实现优化后,如“三数取中法”选择基准等技巧,能进一步提升性能。
  • 教育示例:快速排序展示了分治策略在解决问题上的强大威力,是学习、竞赛中广泛使用的经典实例。
  • 实际应用:在很多编程语言的标准库中,快速排序被用于实现数组和列表的排序功能,例如C++ STL中的std::sort函数就采用了快速排序及其改进版。

需要注意的是,在最坏情况下,当输入数据已经完全有序或逆序时,快速排序的时间复杂度会退化到O(n²),但这种情况在实际应用中相对较少见。为了规避这一问题,可以采用随机化选择基准元素的方法,使算法在概率意义下有较好的表现。

目录
相关文章
|
2天前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
40 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
13天前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
188 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
20天前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
144 1
|
25天前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
|
25天前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
281 0
机器学习/深度学习 算法 自动驾驶
177 0
|
1月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
442 2
|
1月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
96 0
|
2月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
神经架构搜索(NAS)正被广泛应用于大模型及语言/视觉模型设计,如LangVision-LoRA-NAS、Jet-Nemotron等。本文回顾NAS核心技术,解析其自动化设计原理,探讨强化学习、进化算法与梯度方法的应用与差异,揭示NAS在大模型时代的潜力与挑战。
341 6
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
|
SQL JSON C语言
Python中字符串的三种定义方法
Python中字符串的三种定义方法
449 2

热门文章

最新文章

  • 1
    Python零基础爬取东方财富网股票行情数据指南
    46
  • 2
    解析Python爬虫中的Cookies和Session管理
    44
  • 3
    Python日志模块配置:从print到logging的优雅升级指南
    33
  • 4
    【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
    40
  • 5
    (Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
    40
  • 6
    (Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
    72
  • 7
    (numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
    42
  • 8
    (numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
    60
  • 9
    (Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
    32
  • 10
    (Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
    53
  • 推荐镜像

    更多
    下一篇
    日志分析软件