当前位置:首页python > 正文

野牛程序员讲少儿编程之——快速排序(Python版)

作者:野牛程序员:2025-03-17 12:15:31python阅读 2068
野牛程序员讲少儿编程之——快速排序(Python版)

🦬 野牛程序员讲少儿编程之——快速排序(Python版)

小朋友们,今天咱们继续聊 快速排序(Quicksort),这可是排序界的超级英雄
它的速度快得像闪电,很多编程大赛都会用它来搞定超大数据的排序问题!⚡🚀


📌 快速排序到底是啥?

快排的核心思想是 “分而治之”,就像整理玩具一样:

  1. 选一个基准值(Pivot),比如拿起一个玩具🎁 说:“大家跟它比比大小!”

  2. 比它小的放左边,比它大的放右边,这样,玩具堆就分成了两部分。

  3. 左右两边继续进行同样的操作,直到所有玩具都排好为止!


🧐 快速排序是怎么工作的?

来看看下面这堆乱七八糟的数字:

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

1225 只剩两个数了,它们已经是正确的顺序了:

[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 代码自己实现快速排序吧! 🐍🚀🚀🚀


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 野牛程序员讲少儿编程之——快速排序(Python版)
  • 相关推荐

    最新推荐

    热门点击