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

Python实现快速排序的三种经典写法及算法解析

今天想熟悉一下python的基础写法,那就从最经典的快速排序来开始吧:

1、经典分治写法(原地排序)
时间复杂度:平均O(nlogn),最坏O(n²)
空间复杂度:O(logn)递归栈空间
特点:通过左右指针交换实现原地排序

def quick_sort(arr, low, high):
    if low < high:
        pi = partition(arr, low, high)
        quick_sort(arr, low, pi-1)
        quick_sort(arr, pi+1, high)

def partition(arr, low, high):
    pivot = arr[high]
    i = low - 1
    for j in range(low, high):
        if arr[j] <= pivot:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i+1], arr[high] = arr[high], arr[i+1]
    return i + 1

2、Pythonic简洁写法(非原地)
特点:利用列表推导式,代码更简洁但需要额外空间

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)

 

3、尾递归优化写法
特点:减少递归深度,避免栈溢出风险

quick_sort(arr, low=0, high=None):
    if high is None:
        high = len(arr) - 1
    while low < high:
        pi = partition(arr, low, high)
        if pi - low < high - pi:
            quick_sort(arr, low, pi-1)
            low = pi + 1
        else:
            quick_sort(arr, pi+1, high)
            high = pi - 1
    return arr

算法核心思想:分治法+基准值选取。第一种实现最接近传统快速排序定义,第二种适合教学演示,第三种适合处理大数据集。实际使用时建议添加随机化基准值选择来避免最坏情况。

http://www.xdnf.cn/news/904897.html

相关文章:

  • 【知识扫盲】如何由inq,ouq和totaltime计算tokens/s
  • 栈的概念以及实现
  • SOC-ESP32S3部分:32-LVGL显示框架
  • ComfyUI 工作流
  • Numpy 之 reshape 教程
  • 【OpenGL学习】(五)自定义着色器类
  • Redis知识
  • 强化学习基础概念图文版笔记
  • 【QT常用技术讲解】多线程执行后台命令行的两种方式(后台运行和返回打印信息)
  • 【Linux】grep 命令详解及使用示例:搜索匹配指定模式的文本行
  • 【JJ斗地主-注册安全分析报告】
  • 20250606-C#知识:匿名函数、Lambda表达式与闭包
  • 动态IP与静态IP:数字世界的“变脸术”与“身份证”
  • CSS 轮廓(Outline)与边框(Border)的深度解析
  • 【Zephyr 系列 12】BLE + NVS + 低功耗融合实战:打造可配置蓝牙信标系统
  • Codeforces EDU Round 179 A~D
  • 【自动驾驶避障开发】如何让障碍物在 RViz 中‘显形’?呈现感知数据转 Polygon 全流程
  • AlphaDrive:通过强化学习和推理释放自动驾驶中 VLM 的力量
  • C# 日志管理功能代码
  • Electron Fiddle使用笔记
  • ComfyUI 中如何使用 Depth ControlNet SD1.5
  • 嵌入式学习笔记-freeRTOS taskENTER_CRITICAL(_FROM_ISR)跟taskEXIT_CRITICAL(_FROM_ISR)函数解析
  • 金蝶云星空·旗舰版与吉客云:赋能电商企业业财一体化
  • 软件功能模块归属论证方法
  • Python训练营打卡 Day46
  • 气体绝缘开关设备局部放电监测中PRPD和PRPS图谱的深度分析
  • 影楼精修-AI衣服祛褶皱算法解析
  • 【动手学深度学习】3.1. 线性回归
  • 集成电路设计:从概念到实现的完整解析优雅草卓伊凡
  • 【配置 YOLOX 用于按目录分类的图片数据集】