标签:Python 算法 快速排序 递归 形参实参
前言
最近在自学 Python 基础算法,手写了递归版快速排序,写代码时一直搞不懂函数里的 seq 和外部定义的 nums 是什么关系,踩了不少小坑,整理成笔记分享出来,新手一看就懂。
完整可运行代码
核心疑问:seq 和 nums 到底是什么关系?
很多新手和我一样,会困惑为什么函数里用 seq,外面用 nums,这里用最简单的大白话解释:
- nums:实参(真实数据)是主程序里我们自己定义的实际列表,存放需要排序的随机数字,是真实要处理的数据。
- **seq:形参(接收容器)**是函数
qsort的参数,专门用来接收传进来的 nums,函数内部所有排序操作,都是操作seq。 - 本质关系调用
qsort(nums)时,相当于执行了seq = nums,二者指向同一份数据,只是名字不同。
简单理解:nums 是外面的 “实物”,seq 是函数里的 “代号”。
快速排序核心原理
- 分治思想:选一个基准值,把列表拆成「比基准小」和「比基准大」两组
- 递归处理:对拆分后的两个子列表,重复上述拆分逻辑
- 结果拼接:排序后的小数组 + 基准值 + 排序后的大数组
运行示例
学习总结
递归版快排逻辑简洁,核心是拆分 + 递归 + 合并 区分形参、实参:外部数据传入函数,只是换了个名字,数据本身不变 新手手写算法,重点搞懂参数传递逻辑,避免基础概念混淆