当前位置:首页算法 > 正文

“野牛程序员·少儿编程算法启蒙课”之——快速排序,像忍者一样分身排序!

作者:野牛程序员:2025-04-25 08:01:11算法阅读 1997
“野牛程序员·少儿编程算法启蒙课”之——快速排序,像忍者一样分身排序!

🎬 什么是快速排序?

快速排序,全名:快得很的排序(开玩笑😄)

它是一种“分而治之”的策略,像切蛋糕一样,把数据一切再切,左边的比中间这个小,右边的比中间这个大,然后——递归地各自再去切!

就像一个忍者,把一堆人分成左边(低年级),右边(高年级),然后左边自己再分,右边也自己再分……最后自动就排好了队!


🎲 举个例子来理解:

假设有这样一组数字:

[7, 3, 9, 4, 6, 2]

Step 1:选一个“基准值”(pivot)
比如选第一个:7

Step 2:把比 7 小的放左边,比 7 大的放右边:
[3, 4, 6, 2](左边)7 [9](右边)

Step 3:左边 [3, 4, 6, 2] 再来一次快速排序!选 3:
[2] 3 [4, 6]

继续拆下去……

最后就拼起来啦:
[2, 3, 4, 6] + 7 + [9] → 排好了!


🧑‍💻 C++ 代码来了:

#include <iostream>
using namespace std;

void quickSort(int arr[], int left, int right) {
    if (left >= right) return;

    int pivot = arr[left];  // 选第一个当基准
    int i = left, j = right;

    while (i < j) {
        // 从右边找第一个比 pivot 小的
        while (i < j && arr[j] >= pivot) j--;
        // 从左边找第一个比 pivot 大的
        while (i < j && arr[i] <= pivot) i++;

        if (i < j) {
            swap(arr[i], arr[j]);
        }
    }

    // 基准归位
    swap(arr[left], arr[i]);

    // 递归处理左边和右边
    quickSort(arr, left, i - 1);
    quickSort(arr, i + 1, right);
}

void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}

int main() {
    int arr[] = {7, 3, 9, 4, 6, 2};
    int size = sizeof(arr) / sizeof(arr[0]);

    cout << "排序前:";
    printArray(arr, size);

    quickSort(arr, 0, size - 1);

    cout << "排序后:";
    printArray(arr, size);

    return 0;
}

🔎 快速排序的亮点:

✨ 平均时间复杂度是 O(n log n),比冒泡、选择、插入快多了
✨ 思维训练非常棒,能让孩子理解“递归”、“分治”这些计算机里超重要的概念
✨ 排序速度快到像忍者一样,一刀两断!


🧠 小贴士(写给小朋友):

  • 快速排序不是看谁速度快,而是分组分得妙!

  • 每次都找个“中间人”(pivot)当小组长

  • 小组长左边的都比它小,右边的都比它大

  • 然后大家继续自己选小组长,分分分!


🧡 小小挑战题:

动手把 [10, 7, 8, 9, 1, 5] 用快速排序排一排~
写代码前,先在纸上模拟一遍,看看分成了哪几组,最后拼成啥样?


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • “野牛程序员·少儿编程算法启蒙课”之——快速排序,像忍者一样分身排序!
  • 相关推荐

    最新推荐

    热门点击