学编程时,排序算法总是让人头疼。冒泡、快排、归并一堆名字,光看书容易晕。其实换个思路,把它们和日常生活联系起来,记忆轻松不少。
冒泡排序——排队打饭的慢队伍
想象你在食堂打饭,大家按高矮排队。但一开始乱的,每次相邻两人比较,高的往后挪。一轮下来最高的排到最后,像气泡浮到水面。下一轮再从头开始,直到队伍有序。这就是冒泡排序:每趟把最大值“冒”到最后。
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
快速排序——分组投票选队长
班里要选活动小组长,老师随便点一人当基准(pivot),比他小的站左边,大的站右边。然后左右两组各自再找基准继续分,像不断拆分讨论小组,直到每组只剩一人。这种“分而治之”的方式就是快排,效率高,就像快速缩小问题范围。
选择排序——每次挑最矮的同学站出来
体育课排队,老师从队里找出最矮的站第一个位置,再在剩下的人里找最矮的放第二位,依次类推。虽然过程慢,但逻辑清晰。选择排序就是这样,每趟选最小元素放到前面已排好的区域后面。
插入排序——整理扑克牌的手法
打牌时,你一张张摸牌,每拿到一张就把它插进手里已排好序的牌中对应位置。新牌逐个插入,手里的牌始终有序。插入排序正是如此,适合数据量小或基本有序的情况,就像我们自然整理东西的习惯。
归并排序——合并两个有序名单
两个班级分别按成绩排好了名次,现在要把两个有序名单合并成一个。只需要从两列队首比较,取较小者加入新队列,依次进行。归并排序先拆分数组到最小单位,再两两合并,像拼积木一样重建有序序列。
这些算法本身不难,难的是记混名字和逻辑。用生活中熟悉的场景去对应,理解更深,也不容易忘。下次复习时,不妨想想打饭、发牌、分组这些画面,代码写起来也会顺手许多。