生活智库网
白蓝主题五 · 清爽阅读
首页  > 亲子教育

冒泡排序和选择排序有什么不同?用孩子能懂的方式讲明白

带孩子学编程时,经常会遇到排序算法的问题。比如老师布置了一个任务:把一堆打乱的数字按从小到大排好。这时候,冒泡排序和选择排序就派上用场了。虽然它们都能完成任务,但方法完全不同,就像两个小朋友整理玩具的方式不一样。

冒泡排序:像排队做操一样慢慢挪

想象一下,几个小朋友站成一排做操,老师要按身高从矮到高排队。冒泡排序的做法是:从第一个小朋友开始,两两比较,如果左边的比右边的高,就让他们交换位置。这样一轮下来,最高的那个小朋友就会“冒”到最后面,像水里的气泡浮上来一样。

接着再从头来一遍,又会有一个“次高”的小朋友跑到倒数第二的位置。重复这个过程,直到所有人都排好了。

for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < n - i - 1; j++) {
        if (arr[j] > arr[j + 1]) {
            // 交换两个数
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}

选择排序:每次挑出最小的那个

另一个小朋友整理玩具的方式不一样。他不着急换位置,而是先在所有玩具里找最小的一个,然后放到第一个位置。接着,在剩下的玩具里再找最小的,放到第二个位置。就这样一次次“选”出来,直接放到该在的地方。

这种方式就是选择排序。它每一趟只做一次交换,但要花时间去找最小值。

for (int i = 0; i < n - 1; i++) {
    int minIndex = i;
    for (int j = i + 1; j < n; j++) {
        if (arr[j] < arr[minIndex]) {
            minIndex = j;
        }
    }
    // 把最小值和当前位置交换
    int temp = arr[i];
    arr[i] = arr[minIndex];
    arr[minIndex] = temp;
}

它们到底有什么不一样?

冒泡排序像是不断纠正错误:只要发现前后顺序不对,马上交换。过程中交换次数多,但思路特别直观,孩子容易理解。就像两个同学发现自己站错了,立刻换位置。

选择排序更“有计划”。它不急着交换,而是先看完整个队列,找出最该站第一位的人,再请他上去。每轮只交换一次,效率稍高一点,但找最小值的过程也不能省。

举个例子:有五个数字 [5, 2, 8, 1, 9]。冒泡排序会在第一轮中让 1 不断往前换,一步一步移到前面;而选择排序会直接找到 1,一把把它放到最前面。

教孩子的时候,可以用卡片或积木来演示这两种方式。一个强调“发现错误就改”,一个讲究“先观察再行动”。不同的策略,也能达到同样的目标。