Python 快速排序算法实现与原理详解
快速排序是一种高效的分治排序算法。本文深入解析其分区(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 基础数据结构优化的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













