高中信息技术教学案例:如何用“打擂台”和“冒泡”讲透冒泡排序
共 2776字,需浏览 6分钟
·
2026-06-08 17:51
一、项目背景
- 课程名称:高中信息技术·算法与程序设计
- 授课对象:高中一年级学生
- 先修知识:学生已掌握Python基础语法(变量、循环、列表),了解“排序”的基本概念,但尚未接触过具体排序算法。
二、我的角色
- 课程主讲教师、教学设计者
三、核心挑战
在教学中,我发现学生对冒泡排序的主要困惑在于:
- 难以理解“两两比较”的意义:不知道为什么需要反复比较。
- 搞不清“趟数”和“每趟次数”的关系:容易混淆内外循环的边界。
- 觉得算法抽象、枯燥:认为这只是数学逻辑,与生活无关。
四、我的教学方案与实施过程
为了解决上述问题,我设计了一套“生活化比喻 + 可视化演示 + 代码跟练”的教学流程。
第一步:生活化比喻,建立感性认知(5分钟)
我不会一上来就讲代码,而是先讲一个“体育课排队”的故事。
场景:体育课上,老师要求同学们按身高从矮到高(升序)排成一列。规则是:从队首开始,相邻两个人互相比较,如果前面的人比后面的人高,他们就交换位置。这样,一趟比较下来,最高的人就像“冒泡”一样,被“推”到了队伍的最后面。然后,下一趟忽略最后一人,重复上述过程,直到全部排好。
通过这个比喻,学生们立刻理解了三个核心概念:
- 两两比较:为什么要比(为了把高的往后推)。
- 一趟排序:一次完整的相邻比较过程。
- 冒泡:为什么叫“冒泡”(最高的人逐步浮到末尾)。
第二步:可视化演示,直观理解过程(10分钟)
在PPT上,我使用动画分步演示一个具体例子:[5, 2, 3, 1] 的升序排列。
- 第一趟:比较5和2 → 交换 → [2, 5, 3, 1]比较5和3 → 交换 → [2, 3, 5, 1]比较5和1 → 交换 → [2, 3, 1, 5] (第一趟结束,5已就位)
- 第二趟:比较2和3 → 不交换 → [2, 3, 1, 5]比较3和1 → 交换 → [2, 1, 3, 5] (第二趟结束,3已就位)
- 第三趟:比较2和1 → 交换 → [1, 2, 3, 5] (全部排序完成)
同时,我引导学生观察并总结规律:
- 要对 n 个数字排序,最多需要 n-1 趟。
- 每一趟比较的次数,都比上一趟少1次。
第三步:代码实现,将思路转化为程序(15分钟)
在充分理解过程后,我再带领学生将思路“翻译”成Python代码。
# 冒泡排序(升序)
def bubble_sort(arr):
n = len(arr)
# 外层循环控制比较的“趟数”,共需要 n-1 趟
for i in range(n - 1):
# 内层循环控制“每趟”的比较次数
# 每完成一趟,最大的数就会被“冒”到最后,所以比较次数减少 i
for j in range(n - 1 - i):
# 如果前面的数大于后面的数,则交换位置
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
# 打印每一趟的结果,便于观察
print(f"第{i+1}趟排序结果:{arr}")
return arr
# 测试
test_list = [5, 2, 3, 1]
print(f"原始列表:{test_list}")
sorted_list = bubble_sort(test_list)
print(f"最终排序结果:{sorted_list}")
代码讲解要点:
- 内外循环的对应关系:i 代表第几趟,j 代表当前比较到的位置。
- range(n-1-i) 的巧妙之处:直观地体现了“每趟比较次数递减”的规律。
- 交换逻辑:Python 特有的 a, b = b, a 写法,简洁高效。
第四步:优化与讨论,培养算法思维(5分钟)
最后,我会引导学生思考算法的“效率”问题。
- 问题:如果某趟排序中,一次交换都没发生,说明什么?(列表已经有序。)
- 优化:我们可以加入一个标志位 swapped,如果某趟没有发生交换,则直接结束排序。
# 优化后的冒泡排序
def bubble_sort_optimized(arr):
n = len(arr)
for i in range(n - 1):
swapped = False
for j in range(n - 1 - i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
print(f"第{i+1}趟未发生交换,提前结束。")
break
return arr
五、教学成果与反思
- 学生反馈:通过“体育课排队”的比喻和分步动画,90%的学生能够独立说出冒泡排序的基本过程。课后编程作业中,约85%的学生能够独立或通过少量提示完成基础版冒泡排序代码。
- 我的思考:从具体到抽象:对于初学者,必须先用生活化例子建立感性认知,再过渡到代码,效果远超直接讲授算法逻辑。可视化至关重要:过程中不可见的“数据交换”,必须通过动画或打印中间结果让其“显形”。算法思维比代码更重要:教学重点不是记住代码,而是理解“两两比较、逐步推高”的核心思想。这个思想可以迁移到许多其他问题的解决中。
