Python 快速排序算法实现与原理详解

木白
木白
发布时间:2026-10-12| 2人浏览过
原创

快速排序是一种高效的分治排序算法。本文深入解析其分区(Partition)与递归(Quicksort)逻辑,提供可直接运行的 Python 标准实现代码。通过演示代码结构与参数传递方式,说明如何通过基准值划分数据,并对比 O(nlogn) 平均时间与 O(n²) 最差时间的性能特征,助您掌握该算法的实际应用。

快速排序核心运行机制

快速排序依托分治策略,核心分为两步:首先通过PARTITION过程选定一个基准值(通常为数组末尾元素),将小于基准的元素移至左侧,大于基准的移至右侧,返回基准的最终索引位置;随后以该位置为界,递归调用QUICKSORT对左右两个子区间重复上述过程,直至区间长度为1或0,完成整体排序。

Python 代码实现与操作步骤

第1步:编写分区逻辑函数

目的:确定基准值最终位置并完成数组局部重排。入口/参数:列表对象、左索引 p、右索引 r。动作:遍历区间维护游标,交换不满足条件的元素,最后归位基准。完成状态:函数返回准确的分割索引,此时索引左侧均小于基准,右侧均大于等于基准,为下一步递归划分奠定基础。

def partition(array, p, r):
    x = array[r]          # 选取末尾元素作为基准
    i = p - 1             # 维护“小与区”右边界
    for j in range(p, r): # 遍历需处理区间
        if array[j] < x:   # 严格小于基准值才移动
            i += 1
            array[j], array[i] = array[i], array[j]
    i += 1                # 基准值归位到正确分割点
    array[i], array[r] = array[r], array[i]
    return i

第2步:构建递归排序主函数

目的:利用分区返回的中间索引,将大问题拆解为左右子问题并持续递归。入口/参数:列表对象、边界索引 p 与 r。动作:校验 p < r 后调用分区函数,对返回值的两侧子区间重复递归。完成状态:当前递归层级处理完毕,对应切片区域已按顺序排列,调用栈向下继续推进。

def quick_sort(array, p, r):
    if p < r:
        q = partition(array, p, r)
        quick_sort(array, p, q - 1)   # 递归排序左半区
        quick_sort(array, q + 1, r)   # 递归排序右半区

第3步:初始化数据并触发执行

目的:在标准入口中准备测试用例并打印排序结果。入口/参数:测试数据集。动作:实例化数组,计算末位索引并传入排序函数,遍历输出。完成状态:终端控制台依次显示由小到大排列的整数序列,程序正常退出无异常抛出。

import sys

if __name__ == "__main__":
    array = [1, 3, 5, 23, 64, 7, 23, 6, 34, 98, 100, 9]
    quick_sort(array, 0, len(array) - 1)
    for a in array:
        sys.stdout.write("%d " % a)

性能表现与适用场景

在常规数据分布下,快速排序的时间复杂度稳定在 O(nlogn),且由于内存访问模式连续、缓存命中率高,其常数因子显著低于堆排序,实战中通常表现出更快的运行速度。需注意,当输入数组本身已高度有序且未做随机化处理时,基准值选取可能退化导致时间复杂度攀升至 O(n²)。因此,该算法更适用于中等规模、分布相对均匀的内部排序任务。

总结

以上就是 Python 实现快速排序算法的详细原理、代码结构拆解与性能分析。通过理解分区划分的边界控制与递归终止条件,开发者可灵活调整基准策略以适应不同业务场景。更多关于 Python 基础数据结构优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。