野牛程序员讲少儿编程之——快速排序(Python版)
🦬 野牛程序员讲少儿编程之——快速排序(Python版)
小朋友们,今天咱们继续聊 快速排序(Quicksort),这可是排序界的超级英雄!
它的速度快得像闪电,很多编程大赛都会用它来搞定超大数据的排序问题!⚡🚀
📌 快速排序到底是啥?
快排的核心思想是 “分而治之”,就像整理玩具一样:
选一个基准值(Pivot),比如拿起一个玩具🎁 说:“大家跟它比比大小!”
比它小的放左边,比它大的放右边,这样,玩具堆就分成了两部分。
左右两边继续进行同样的操作,直到所有玩具都排好为止!
🧐 快速排序是怎么工作的?
来看看下面这堆乱七八糟的数字:
64, 25, 12, 22, 11
快排会这样处理它:
📌 第 1 步:选择基准值(Pivot)
通常选择最后一个数作为基准值。这里 选 11 作为 pivot(基准值):
64, 25, 12, 22, [11]
所有比 11
小的放左边,比 11
大的放右边:
[11], 25, 12, 22, 64
✅ 11 站好了,不再动! 🎉
📌 第 2 步:继续对右边的数字排序
剩下的数字 25, 12, 22, 64 还没排好,我们选 最后一个数 64 作为 pivot:
[11], 25, 12, 22, [64]
所有比 64
小的放左边,比 64
大的放右边(但是没有比它大的了):
[11], 25, 12, 22, [64] ✅
🎉 64 也站对了位置!
📌 第 3 步:继续对中间的数字排序
现在,剩下的 25, 12, 22 还没排好,我们继续!
选 22 作为 pivot:
[11], 25, 12, [22], 64
所有比 22
小的放左边,比 22
大的放右边:
[11], 12, [22], 25, 64
🎉 22 也站对了位置!
📌 第 4 步:剩下的 12 和 25
12
和 25
只剩两个数了,它们已经是正确的顺序了:
[11], [12], [22], [25], [64]
完美!排序完成 ✅
🔥 Python 代码实现
快排的 Python 代码其实非常简单,一看就懂!🐍
def quick_sort(arr): if len(arr) <= 1: # 递归终止条件,数组长度小于等于 1 就不用排了 return arr pivot = arr[-1] # 选择最后一个元素作为基准值 left = [x for x in arr[:-1] if x <= pivot] # 小的放左边 right = [x for x in arr[:-1] if x > pivot] # 大的放右边 return quick_sort(left) + [pivot] + quick_sort(right) # 递归排序左右两边并拼接 # 测试代码 arr = [64, 25, 12, 22, 11] sorted_arr = quick_sort(arr) print("排序后:", sorted_arr)
输出结果:
排序后: [11, 12, 22, 25, 64]
🔎 代码讲解
📌 quick_sort(arr)
如果数组长度
<=1
,说明已经排好了,直接返回。选择 最后一个元素 作为基准值
pivot
。left = [x for x in arr[:-1] if x <= pivot]
➡ 把比 pivot 小的数放左边。right = [x for x in arr[:-1] if x > pivot]
➡ 把比 pivot 大的数放右边。return quick_sort(left) + [pivot] + quick_sort(right)
➡ 递归排序左右两部分,并把它们拼起来!
🚀 为什么快排这么快?
快排的时间复杂度通常是 O(n log n),比 冒泡排序(O(n²)) 快得多!
它的秘密在于“分而治之”,每次都把问题分成两个小问题,让排序更高效!
📌 什么时候快?
如果每次 pivot 能把数组均匀分成两半,那么排序时间是 O(n log n),超级快!🚀
例如:
50, 30, 70, 20, 40, 60, 80
pivot 选 50,左右各一半,排序效率超高!
📌 什么时候慢?
如果 pivot 总是选到 最大或最小的数,就会变成最坏情况 O(n²)。
例如:
10, 20, 30, 40, 50
pivot 选 50,左边有 4 个,右边没有,变成 冒泡排序的效率 😱。
优化方法:
随机选择 pivot(比如
arr[len(arr) // 2]
选中间值)。三数取中法(选第一个、最后一个、中间的数,取它们的中间值)。
🎉 小朋友们今天跟野牛程序员学到了什么?
✅ 快速排序是一种 “分而治之” 的排序算法。
✅ 选一个 基准值(pivot),小的放左边,大的放右边。
✅ 递归排序 左右两部分,最终得到排序结果!
✅ 代码 简洁、优雅、速度快,适合大规模数据!🚀
小朋友们,快去试试 用 Python 代码自己实现快速排序吧! 🐍🚀🚀🚀
