《用排序算法进行数据整理》教学案例

2024-01-09 09:27李学剑
中国信息技术教育 2024年1期
关键词:列表排序次数

李学剑

课程核心素养目标

①根据学习与生活需要,有意识地选用排序算法处理信息,对于简单问题,确定解决问题的需求和数据,使用排序整理数据,解决问题。(信息意识)

②通过生活中的实例,了解排序算法的原理,对于给定的问题,能将其分解为一系列的实施步骤,使用顺序、分支、循环三种基本控制结构简单描述排序算法实施过程,通过编程验证该过程。(计算思维)

③通过学习排序算法,体会算法的特征,有意识地将其应用于数字化学习过程中,从多个方面熟悉程序,不要求每个算法问题都自主编程实现,阅读理解、修改运行等也是有意义的体验。(数字化学习与创新)

④认识到排序算法对解决生活和学习中问题的重要性,基于对算法价值和局限性的了解,初步具有知识产权保护意识。(信息社会责任)

课程标准要求

①借助学习与生活中的实例,体验身边的算法,理解算法是通过明确的、可执行的操作步骤描述的问题求解方案。

②结合生活中的实例,分析简单算法的执行过程与结果。

③通过真实案例,知道算法步骤的执行次数与问题的规模有关。

④基于给定的算法,能针对不同的输入数据规模,分别“数出”算法中某些步骤执行的次数。

⑤能基于对算法的理解,设置和调整参数,观察相应程序的执行。

⑥针对简单问题,尝试设计求解算法,并通过程序进行验证。

教学内容分析

《用排序算法进行数据整理》一课是根据《义务教育信息科技课程标准(2022年版)》(以下简称“新课标”)第三学段“身边的算法”模块中的学业要求设计的教学案例。“身边的算法”模块包括“算法的描述”“算法的执行”“算法的效率”三部分内容,“算法的执行”单元是本模块的核心,本单元运用顺序、选择和循環三种基本控制结构及其组合,进行问题求解的算法实现。

单元整体实施——①算法基础:顺序结构、选择结构、循环结构。②常见算法:枚举算法、迭代算法、排序算法。通过学习,学生能熟悉常用算法的基本思想,理解算法执行的流程,了解利用算法求解简单问题的基本方式,培养学生初步运用算法思维的习惯,并通过实践形成设计与分析简单算法的能力,用算法求解简单的问题。

本课主要学习冒泡排序算法,排序算法是使用频率最高的算法之一,冒泡排序是其中一种很典型且相对简单的方法。本课要求学生在理解冒泡排序过程的同时,能够运用冒泡排序算法解决实际问题,体会到排序算法在生活中的应用。

学情分析

本课授课对象为初一学生,学生对本节排序中需要的循环结构语句、条件判断语句及列表变量的使用方法都已有基础,同时在生活中排序和排队的体验很多,对于排序算法的实现有认知关联,只是还没上升到理论层次。冒泡排序算法理论性比较强,但学生前面已经学习了枚举算法和迭代算法,初步建立了算法思维,为学习冒泡排序算法奠定了基础。

教学目标

1.单元学习目标

①结合生活中的实例,了解算法的顺序、分支和循环三种基本控制结构,能分析简单算法的执行过程与结果。②通过真实案例,知道算法步骤的执行次数,基于给定的算法,能针对不同的输入数据规模,分别“数出”算法中某些步骤执行的次数。③能基于对算法的理解,设置和调整参数,补充程序代码,观察算法的运行原理。④面对生活实例,尝试设计求解算法,并通过程序进行验证,解决简单的实际问题。

2.本课学习目标

①理解冒泡排序算法的基本原理,能数出冒泡排序的轮次和每轮对比的次数。②使用循环语句和条件判断语句编程实现冒泡排序代码。③能运用冒泡排序进行数据整理,解决简单的实际问题。

教学重难点

重点:冒泡排序内外循环范围的确定和条件判断交换相邻数据。

难点:灵活运用冒泡排序算法整理数据解决实际问题。

教学过程

1.情境引入,看视频找不同

师:学习新课前我们先来观看两个视频,它们分别是同学们在学校餐厅就餐和上体育课时拍摄的,观察这两个视频中队列的身高各有什么特点。

学生活动:观看视频,找出视频中两个队列的身高特点——餐厅就餐队列身高参差不齐,体育课队列从矮到高有序排列。(引出问题:怎样有序排队?)

设计意图:新课标倡导真实性学习,注重创设真实情境。从学生身边具体事例“餐厅就餐队列”和“体育课队列”导入,激发学生的学习兴趣,提高学生的学习参与度。

2.项目分析,认识冒泡排序

师:我们平时怎样让队形有序排列?(教师请6位学生进行演示)同学们观察,我们在排队的时候需要进行怎样的比较和移动。要让这6位同学按照从矮到高的顺序排列,首先我们进行第1轮比较,先比较前两个同学,大家看一下谁高,他们需不需要调换一下位置(生答),这里第1轮比较进行了第一次对比。然后我们再看第二个同学和第三个同学,需不需要交换,这是第几次对比?(重复两两对比)第1轮排序结束,大家数一数,第1轮一共有几位同学参加了排序?6位同学都参加了,一共比较了几次?(4次)第1轮比较完成后已经把队伍里最高的同学排在队尾,前面这4位同学还是无序的,我们现在进行第2轮比较。重复上述比较过程,直至6位同学按顺序排列后结束。

学生活动:在观看同学演示排列的同时填写统计表(如下表)。

师:刚才几位同学进行了几轮比较?(6位同学进行了5轮比较)大家思考一下,如果10位同学需要几轮比较?20位同学呢?我们是否能从其中寻找到某种规律呢?(排序需要的轮次为总人数-1,如果将同学们的身高数值作为数据,排序的轮次是数据个数减一个)从统计表的第二行我们可以看出,参与排队的人数随着轮次的增加而依次减少,再看第一行和第三行,轮次和每轮对比的次数有什么规律?1-5、2-4、3-3、4-2、5-1,它们的和都是6,也就是排队的总人数即排序的总数据个数。

学生活动:总结出排序的轮次公式(数据个数-1)、每轮对比次数公式(数据个数-轮次)。

师:从这两个公式中我们可以看出,要用这种方式实现排序需要两重循环,一重循环是比较的轮次,另一重循环是每轮对比次数,这两个公式也分别是两重循环的范围。我们现在可以归纳出这种排序的基本思路:从前向后不断比较相邻数据,如果前面的数比后面的数大则进行交换,重复该过程,直到所有数据都有序排列才停止这个过程。越小的数据会经由交换慢慢“浮”到数列的顶端,所以我们把它叫做冒泡排序。它的核心思想可以概括为:两两比较,大值移后。

设计意图:新课标学业要求指出,基于给定的算法,能针对不同的输入数据规模,分别“数出”算法中某些步骤执行的次数。通过观看同学排序演示过程,学生能自主数出其中比较的轮次和每轮对比的次数,在教师的引导下总结出轮次公式和每轮对比次数公式,理解冒泡排序的算法原理。

3.项目探究,体验冒泡排序的过程

师:演示排队的6位同学,他们的身高数据可以使用一个列表进行存储,这个列表中有几个元素?(6个元素)将一组数据存储到列表,可以用len()函数获取列表中的元素个数。

学生活动:结合排队同学的身高数据实例,新建一个列表存储,并用len()函数返回列表中数据元素的个数值。

师:不同于本单元学习过的枚举算法和迭代算法,冒泡排序有固定格式的核心代码,它的核心代码有4行,下面我们结合前面的例子分析冒泡排序的代码。刚才这6位同学排队的过程,一共经历了几重循环?(两重循环)我们将排队同学的身高数据存于列表s中,首先用变量k来表示比较的轮次,这是外循环,轮次等于数据个数-1,外循环range函数范围为0至len(s)-1。然后在每一轮次内我们再定义一个变量i,作为每轮比较的对比次数.这是内循环,它的计数范围使用每轮对比次数公式:数据个数-轮次。因为外循环的轮次是从0开始计数的,这一轮次也要减去,内循环range函数范围为0至len(s)-k-1。用if条件表达式判断相邻两个元素的大小,如果第一个数比第二个大,就进行交换。交换是采用Python中的多元赋值直接交换列表中相邻两个数的位置。

学生活动:思考练习,体验冒泡排序的运行过程,打开“身高排序”程序,参考冒泡排序的4行核心代码,将前面排队同学的身高数据由小到大进行排序,把程序代码补充完整,并運行观察每轮的比较结果,体会冒泡排序算法原理。为了更好地理解算法原理,在每一轮比较结束后print输出该轮的比较结果,算法结束后再输出最终排序结果。程序代码如图1所示。

师:观察运行结果,我们发现每一轮比较都将本轮最大数排在本轮最后,第1轮最大数162排在最后,第2轮第二大的数157排在倒数第二位,依此类推,第5轮最小数136排在最前,有n个数据就需要n-1轮比较。

小组合作探究,如果把身高数据改为降序排列,怎样修改程序代码?

学生活动:小组讨论降序与升序代码的异同,完成代码的修改,运行验证排序结果是否正确。

师:降序和升序的循环范围是一样的,升序中如果前一个数比后一个大就进行交换,降序则相反,前一个数比后一个小就进行交换,if条件表达式中的关系运算符应该为小于,数据交换时同样使用多元赋值(如下页图2)。

设计意图:新课标内容要求提出,结合生活中的实例,了解算法的顺序、分支和循环三种基本控制结构,能分析简单算法的执行过程与结果。同时,新课标学业要求也指出,能基于对算法的理解,设置和调整参数,观察相应程序的执行。学生在思考练习中完成程序的代码补充,得出排序结果,通过观察每轮的比较结果,分析冒泡排序的运行过程。在理解冒泡排序算法原理的基础上,修改程序代码把数据改为降序排列,比较降序与升序代码的异同。

4.项目延伸,拓展与提升

师:增强体质有很多体育锻炼方式,学校准备开展问卷调查,让大家给最喜欢的锻炼方式投票,然后依据投票结果安排学校的课间活动,请将问卷调查中同学们最喜欢的体育锻炼方式进行排名。思考:如何保证票数和锻炼方式同步交换?

学生活动:小组讨论,打开“问卷调查”程序,将程序补充完整并运行,观察验证运行结果。

师:“问卷调查”程序中用了两个列表分别存放票数和锻炼方式,票数和锻炼方式在列表中的位置是一一对应的,当我们交换了m列表的票数位置时,同时交换n列表中锻炼方式的位置,就可以保证二者同步交换。程序代码如图3所示。

设计意图:新课标内容要求提到,针对简单问题,尝试设计求解算法,并通过程序进行验证。学生面对简单的数据整理问题,将“问卷调查”程序补充完整,找到票数和锻炼方式同步交换的方法,通过程序验证提升完成简单算法的能力。

5.交流与总结

(1)交流问答

师:通过今天的学习,你有哪些收获呢?①我们今天学习了用(冒泡排序)算法整理数据,它的核心代码有(两)重循环;②外循环范围的比较轮次公式是“数据个数-1”,内循环范围的每轮对比次数公式是“数据个数-轮次”;③升序时前一个数据比后一个数据(大)则进行交换,降序时前一个数据比后一个数据(小)则进行交换。

(2)知识梳理

冒泡排序核心思想:两两比较,大值移后。①外循环限定比较的轮次;②内循环控制每轮比较次数;③条件判断是否交换赋值。

教学反思

本节课以真实问题驱动,从学生身边具体事例“排队”导入,激发了学生的学习兴趣,引导学生分析冒泡排序中数据个数、比较的轮次、每轮对比次数之间的关系。体验用算法的思想方式界定问题、分析问题、组织数据、制订问题解决方案,并对其进行优化,使用冒泡排序算法实现生活中实际问题的求解。

从教学效果来看,本课落实了项目式学习的理念,从冒泡排序的算法思想出发,让学生体验冒泡排序的算法执行,从而理解冒泡排序算法原理,算法程序实现达成度较高。课堂中学生通过观看演示排序过程得出比较的轮次和每轮对比的次数,在教师的引导下能总结出轮次公式和每轮对比次数公式。学生能理解4行核心代码,在思考练习中完成了“身高排序”程序的代码补充,得出排序结果,并通过观察每轮的比较结果,理解冒泡排序算法原理。学生能将“问卷调查”程序补充完整,找到票数和锻炼方式同步交换的方法。整节课通过项目分析、项目探究、项目延伸三个过程,引导学生自主学习、合作探究,从解决生活中的实际问题出发,激发了学生学习兴趣,使学生形成积极主动学习的态度,培养了使用算法解决生活中实际问题的能力,提升了信息科技核心素养。

点评

算法作为信息技术/信息科技教学的核心内容之一,具有极强的基于数理逻辑的事例构架、数据分析与问题解决应用的需求。纯粹地根据现象进行算法描述,可能存在纸上谈兵式的肤浅认知瓶颈,长此以往对计算思维的深度学习是有伤害的。本课突破了这个瓶颈,即把算法基于数据整理,聚焦于具体生活应用——排队,通过对无序与有序的对比、有序数据的整理与技术应用的数据观察与算法总结,很明确地把冒泡排序的原理、过程与效果进行了全面学习与总结,对排序算法的认知较顺利地在动手实践中完成了,并拓展到对问卷数据的排序及相关数据的同步交换等,树立起算法要多样化设计来针对性地解决不同的问题的观念。当然,由于排序算法还有插入排序、快速排序、桶排序等多种算法可供选择,在效率方面如果能够引导学生去对比,开拓他们的视野会让算法学习的内涵更丰富。另外,对于本课中体育问卷相关数据的排序,如果给出同一个二维复杂列表的关系数据进行关键字排序的方案,也能为学生提供计算思维中“迭代”思维的培育与启蒙。

(点评人:山东省青州一中信息技术特级教师  王爱胜)

猜你喜欢
列表排序次数
排序不等式
机场航站楼年雷击次数计算
2020年,我国汽车召回次数同比减少10.8%,召回数量同比增长3.9%
学习运用列表法
一类无界算子的二次数值域和谱
扩列吧
恐怖排序
节日排序
依据“次数”求概率
列表画树状图各有所长