Python 递归实现快速排序|彻底搞懂 seq 和 nums 的传参关系

0 阅读1分钟

标签:Python 算法 快速排序 递归 形参实参

前言

最近在自学 Python 基础算法,手写了递归版快速排序,写代码时一直搞不懂函数里的 seq 和外部定义的 nums 是什么关系,踩了不少小坑,整理成笔记分享出来,新手一看就懂。

完整可运行代码

image.png

核心疑问:seq 和 nums 到底是什么关系?

很多新手和我一样,会困惑为什么函数里用 seq,外面用 nums,这里用最简单的大白话解释:

  1. nums:实参(真实数据)是主程序里我们自己定义的实际列表,存放需要排序的随机数字,是真实要处理的数据。
  2. **seq:形参(接收容器)**是函数 qsort 的参数,专门用来接收传进来的 nums,函数内部所有排序操作,都是操作 seq
  3. 本质关系调用 qsort(nums) 时,相当于执行了 seq = nums二者指向同一份数据,只是名字不同

简单理解:nums 是外面的 “实物”,seq 是函数里的 “代号”。

快速排序核心原理

  1. 分治思想:选一个基准值,把列表拆成「比基准小」和「比基准大」两组
  2. 递归处理:对拆分后的两个子列表,重复上述拆分逻辑
  3. 结果拼接:排序后的小数组 + 基准值 + 排序后的大数组

运行示例

image.png

学习总结

递归版快排逻辑简洁,核心是拆分 + 递归 + 合并 区分形参、实参:外部数据传入函数,只是换了个名字,数据本身不变 新手手写算法,重点搞懂参数传递逻辑,避免基础概念混淆