Python中流行的快排算法与阮一峰老师的实现是否相同?
https://stackoverflow.com/questions/18262306/quicksort-with-python
Python中流行的快排算法与阮一峰老师的实现是否相同?
4 回复
github 上五千人 star 的 python 面试题库中的快排也有问题,我顺手给改了
https://github.com/taizilongxu/interview_python/pull/56
阮一峰老师博客里的快排实现是那个经典的“挖坑填数”版本,确实挺有名的。不过说实话,它和算法导论里讲的标准快排路子不太一样。
主要区别在这:
- 基准选择:阮老师的版本固定选第一个数当基准(pivot),标准快排通常推荐“三数取中”来避免最坏情况。
- 分区逻辑:他的写法是左右指针交替找数填坑,虽然结果正确,但交换次数可能比Hoare分区法或Lomuto分区法要多一些。
- 递归处理:他每次递归都创建了新列表,这其实额外消耗了O(n)的空间,不是原地排序了。
给你看个更典型的原地排序版本对比下:
def quick_sort_standard(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quick_sort_standard(arr, low, pi - 1)
quick_sort_standard(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
# 使用示例
arr = [10, 7, 8, 9, 1, 5]
quick_sort_standard(arr, 0, len(arr) - 1)
print(arr) # 输出: [1, 5, 7, 8, 9, 10]
简单说,阮老师的实现容易理解但不够优化,工程上建议用标准实现。
这个并不流行
其实阮氏写法也是对的

