5.3 数据排序(教学设计)信息技术浙教版2019选择性必修1

2025-10-30
| 19页
| 389人阅读
| 2人下载
精品

资源信息

学段 高中
学科 信息技术
教材版本 高中信息技术浙教版选修1 数据与数据结构
年级 高二
章节 5.3 数据排序
类型 教案-教学设计
知识点 数据排序
使用场景 同步教学-新授课
学年 2025-2026
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 DOCX
文件大小 441 KB
发布时间 2025-10-30
更新时间 2024-11-25
作者 wuhao1987
品牌系列 上好课·上好课
审核时间 2024-11-25
下载链接 https://m.zxxk.com/soft/48911218.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

5.3 数据排序(教学设计) 年级 高二年级 授课时间 2课时 课题 5.3 数据排序 教学 目标 1.了解排序的主要作用,掌握排序的基本概念,知道常用的排序算法。 2.熟练掌握冒泡排序的基本思想和基本程序结构,并能够编程实现冒泡排序。 3.能够完整地进行抽象与建模、设计算法与数据结构、程序实现,解决排序算法的应用问题。 教学 重难点 重点: 1.结合实际项目,掌握用计算机解决问题的一般过程。 2.学会根据项目特点,提炼恰当的数据结构。 3.理解冒泡排序中的迭代思想。 难点: 1.排序算法中对复杂数据结构的处理。 教学 准备 多媒体课件、多媒体教室 教学过程 教师活动 学生活动 新 课 导 入 一、课堂导入 1.通过几张图片展示:上图中都是生活中常见的一些排队或者可以说是排序。抛出问题:我们在日常生活中会经常经历排序的场景,比如体育课上按身高排列等等熟悉的生活体验。这种熟悉的经验,在计算机中的排序又有哪些? 同学们对于电脑并不陌生,在计算机软件系统中,排序是一种常见的操作。 如文件夹中图片文件可分别按名称、大小、类型、修改日期等方式进行排序;电子邮件列表一般按照日期排序,最新的邮件被放置在最顶端;购物网站上搜索到的某类商品可按价格、销量、信用等方式进行排序。 从学生熟悉的事物出发,引出本节课的项目,吸引学生的学习兴趣,培养学生用计算机解决实际问题的信息意识。 新 知 讲 授 一、排序 1.概念 将无序数据按照某种规则(递增或递减),重新排列使其变成有序数据。 对一次具体排序而言,总是针对某一组数据元素的某种具体的序关系进行操作。 2.未排序数据的存储方式 ①以数组作为存储结构 通过关键字之间的比较判断,将数据移到合适的位置 ②以链表作为存储结构 对链表进行排序无须移动数据,只需修改指针即可 计算机要对数据排序,先要考虑数据的组织形式。如果有一组数(23,20,13,18,14,11)分别存储以数组、链表的形式,排序有什么不同呢? 数据存储情况 为了分析问题方便,我们以后假设数据以数组形式存储,然后讨论它的排序算法。排序的基本要求是什么? 以数组为例,每个数组元素都对应存储一个数据。 例如,存储在数组元素d[0]中的数据是23,d[1]中存储的是20,等等。 如果对数组d中的6个数据按升序进行排序,即调整数组d中所有数据的存储位置,使最小的数据存储在d[0]中,次小的数据存储在d[1]中……最大的数据存储在d[5]中。数组d中的所有数据满足:d[0]≤d[1]≤d[2]≤d[3]≤d[4]≤d[5]。这里两个数组元素的比较:d[i]≤d[j] (i=0,1,…,5; j=0,1,…,5),指的是d[i]中的数据小于或等于d[j]中的数据。 对数组d按升序进行排序后,数据的存储情况如下图所示: 排序后的数据存储情况 3.总结 排序(sorting)就是整理数据的序列,使其中元素按照某个值的递增(或递减)的次序重新排列的操作。在排序的过程中,序列里的数据元素的值保持不变,但其排列顺序可能改变。 4.探讨与讨论 ①对“842715”中的数字进行选择排序中的两遍“加工”即为某密码锁 的密码,则该密码可能是( ) A.842715 B.142785 C.872415 D.124578 ②对下列一组原始数组:13,15,2,11,8,18进行选择排序,第一趟排序介绍,数组的状态不可能是( ) A.2,15,13,11,8,18 B.18,15,2,11,8,13 C.13,15,2,11,18,8 D.13,15,18,11,8,2 二、常见的排序算法 1.拓展链接:Python中的排序函数 Python中,对列表进行排序的方法有两种:一种是列表自带的sort方法,只适用于列表,直接对列表进行排序,不会产生新的序列;另外一种是内建函数sorted方法,返回一个新的序列,而原来的序列依然存在。 2.导入 在一次电视节目上,谷歌总裁施密特提出问题:“如何才能更有效地对一百万个32位长整数进行排序?”同在现场的奥巴马总统立刻响应道:“肯定不能用冒泡排序法。”施密特评价说:"天哪!他是从谁那里听说这个的。” 提问:这里奥巴马总统提到的“冒泡排序”,它是如何进行的呢? 3.概念 冒泡排序(Bubble Sort)是在一系列数据中对相邻两个数依次进行比较和调整,让较大的数“下沉(上冒)”,较小的数“上冒(下沉)”的一种排序技术。 (1)以升序为例 ①第一遍加工 冒泡排序算法把待排序的n个元素的数组看成是垂直堆放的一列数据,对相邻两个数进行比较,将较小的数据换到上面的一个元素中(或将较大的数据换到下面的一个元素中)。重复这一过程,直到处理完最后两个元素中的数据,称为一遍加工。 当第一遍加工完成时,数 据 结 构与算法最小的数据已经“上浮”到第一个元素的位置(或最大的数据“下沉”到最后一个元素的位置)。然后对余下的n–1个元素重复上述处理过程,直至最后进行余下两个数据的比较和交换。由于每一遍加工都是将本遍最小的元素像气泡一样“上浮”至本遍的顶端位置(或将本遍最大的元素“下沉”至本遍的底端位置),故称为冒泡排序。 冒泡排序算法对数组d的第一遍加工过程 第一遍加工完毕,最大值23“下沉”至数组最后一个元素的位置。即第一遍加工,先比较相邻两元素d[0]与d[1],不符合所要求的顺序,则交换两者的位置;再比较调整d[1]与d[2]……最后比较调整d[4]与d[5]。 ②第二遍加工 第二轮排序时,只排到导数第二个...以此排完。 若要排序的数有n个,则需要n–1遍加工。第i遍加工中,从第一个数开始,相邻两数比较,若反序则交换两者的位置,直到第n+1–i个数为止。第一个数与第二个数比较,第二个数与第三个数比较……第n–i个与第n+1–i个比较,共比较n–i次。此时第n+1–i个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。 对n个元素的数组,用冒泡排序算法进行排序时,共需比较: 其时间复杂度为〇(n 2 )。 排序过程中,按右面的方式使用变量i和j 变量i:记录正进行的处理遍数,第1遍处理时值为1,第2遍处理时值为2,以此类推。 变量j:记录当前数组元素的下标。每遍处理过程中,j值总是从第一个数组元素的下标值0开始,按每次加1的方式,直至j=n–i–1为止。每当j取定一个值后,当前数组元素d[j]将与它的后一个元素d[j+1]进行比较,若d[j] >d[j+1],则互换这两个数组元素 中的数据。 冒泡排序算法对数组d的5遍加工过程 对规模为n的数组d,冒泡排序的算法流程图如下图所示。 冒泡排序的算法流程图 (2)代码实现: def bubble_sort(d): length=len(d) #序列长度为length,需要执行length–1遍加工 for i in range(1,length): for j in range(0,length–i): if d[j]>d[j+1]: temp=d[j] d[j]=d[j+1] d[j+1]=temp (3)在选取排序算法时,可以根据待排序数据自身的特点来选择相应的算法。 4.探讨与讨论 (1)某场篮球联赛中,有5个班级的比赛积分依次为14,11,13,8,9。若 采用冒泡排序算法从右到左对其进行升序排序,则第二轮排序后的结果是 ( ) A.8,11,13,14,9 B.8,9,13,14,11 C.8,9,14,11,13 D. 14,13,11,9,8 (2)某 Python程序如下: a=[3,1,9,7,6,3] n=len(a) for i in range(1,n): for j in range(n-2,i-2,- 1): if a[jka[j+1]: a[j],a[j+1]=a[j+1],a[j] 程序运行后,数组a的值是( ) A.[9,3,1,7,6,3] B.[9,7,6,3,3,1] C.[1,3,3,9,7,6] D.[1,3,3,6,7,9] 三、排序算法的应用 1.课堂引入 教师抛出问题:同学们,这本书和字典你们都认识吗?都使用过,你们在使用字典或翻书的时候,都是按照其中的顺序进行查找的。 排序能使数据有序,而有序的数据更加便于使用。 2.排序算法在实际生活中的应用 (1)奥运成绩排行榜 每届奥运会各大媒体都会公布一个成绩排行榜,但每个排行榜可能略有不同,如有的是按金牌总数排列的“金牌榜”,有的是按奖牌总数排列的“奖牌榜”,甚至还有“国民人均奖牌榜”,等等。现在,以2008年北京奥运会的奖牌数为例,部分数据(数据统计时间为2008年8月25日)。请你编写一个程序,编制金牌排行榜。 2008年北京奥运会奖牌数表 ①抽象与建模 从表中的数据可以看出,每个国家的信息是一条记录,包括编号、国家/地区、人口数量、各奖牌数等数据项。编制金牌排行榜,要按排序关键字“金牌”降序排序。排序过程中若要交换,则要将待交换的两条记录整体进行交换。 ②设计算法与数据结构 第一种方案: 采用7个一维数组按列存储,即每个数组分别存储每个国家的编号、国家/地区、人口数量、各奖牌数等,如定义b数组存储表中8个国家的金牌数量,其对应的值为[51,1,36,1,3,0,23,9] ; 第二种方案: 采用1个一维数组按行存储,每个数组元素对应某个国家的一条记录信息,如[8,"中国",136407,51,21,28,100]对应中国的相关信息。 采用不同的存储方式,排序时数据的交换方式也有不同: ※若采用7个一维数组按列存储,排序过程中,两条记录的对应数据项都要相应交换,即要考虑7个一维数组的操作。 ※若采用1个一维数组按行存储,排序中的数据交换可对整条记录进行交换操作。 ③编写程序 若存储结构采用1个一维数组,以金牌数为关键字进行降序排序,程序如下: 程序中的“a[j][3]”表示某条记录索引位置为3的信息,即某个国家的金牌数。而“a[j]=a[j+1]”表示整条记录的所有信息的赋值。 3.探讨与讨论 ①有如下Python 程序段: A=[15,20,11,6,12,8,7,3] for i in range(1,3): for j in range(0,8-i): if a[j]>a[j+1]: a[j],a[j+1]=a[j+1],a[j] 程序段运行后,数组a中的数据依次为( ) A.3,6,7.8.11.12.15,20 B15,11.6,12,8,7.3,20 C.11,6,12,8.7,3,15,20 D.6,11,8.7.3.12.15.20 四、课堂小练 五、小结 1.排序 (1)概念 (2)存储方式 数组、链表 2.常见的排序算法 (1)拓展链接:Python中的排序函数 列表自带的sort方法、内建函数sorted方法 (2)冒泡排序 ①概念 冒泡排序是在一系列数据中对相邻两个数依次进行比较和调整,让较大的数“下沉(上冒)”,较小的数“上冒(下沉)”的一种排序技术。 3.排序算法的应用 尽管学生对排序并不陌生, 但如何严谨地定义排序,并 与数据在计算机中存储形式 结合起来思考问题,还需要进一步清晰化。 通过未排序数据的存储方式,串起排序的作用与意义、数据排序的组织形式、排序的概念与要求等等。 通过实际问题,恰当地选择排序结构,并总结排序的概念和特性。(意图:体现先学后教的理念。) 通过课堂练习,加深同学们对数据排序的理解。 通过延伸:拓展链接,将Python中的排序函数问题进行抽象化的展示,让学生理解Python中的排序函数如何解决实际中的问题,体验用Python中的排序函数解决问题的基本流程,逐步形成运用Python中的排序函数解决问题的思维方式和学科方法。 通过有趣的故事,涉及术语 “冒泡排序”,激起学生对排 序的兴趣,对排序概念形成初步认识,同时对“冒泡排序”是什么产生强烈好奇心。 按照由粗到细、逐步求精的策略,推动学生加深对冒泡排序的深刻认识。 从第一遍加工的实现中可以发现规律,进而引导学生概括出全部算法过程。 从第二遍加工的实现中再次加深这个规律的理解,进而引导学生概括出全部算法过程。 通过实际问题,恰当地选择迭代结构,并总结迭代的基本操作。 从前面的两次加工工程,提炼出最红的5遍加工过程,循序渐进,最终得出冒泡算法的算法流程图,然后再引导学生写出代码。 展示多个排序算法,然后纵向对比出各个算法的特点,让学生一目了然。 通过课堂练习,加深同学们对冒泡算法的理解。 从学生熟悉的事物出发,引出本节课的项目,吸引学生的学习兴趣,培养学生用计算机解决实际问题的信息意识。 通过排序算法在实际生活中的应用为例子,体会排序过程中若要发生交换,则要将待排序的两记录整体进行交换。 引导学生思考复杂数据排序应当注意的事项。 引导学生总结不同数据存储形式,带来的数 据交换形式不同。 在设计算法与数据结构以两种方案对比的方式展示出来,让学生在对比中更好的理解排序算法在生活中的应用。 通过案例讲解,体验排序算法在生活中的应用,逐步形成运用排序思想解决问题的思维方式和学科方法。 通过课堂练习,加深同学们对排序算法的理解。 用练习巩固课堂知识,帮助学生更好地掌握。 课 堂 练 习 (有题有答案有解析) 1.排序是将无序数据按照某种规则(递增或递减),重新排列使其变成 。 2.待排序数据的存储方式一般有两种: 、 。 3.在排序的过程中,序列里的数据元素的值 ,但其排列顺序 。 4.Python中,对列表进行排序的方法有两种:一种是 ,只适用于列表;另外一种是 。 5.冒泡排序是在一系列数据中对相邻两个数依次进行比较和调整,让较大的数 ,较小的数 的一种排序技术。 6.常见的排序算法有: 、 、 、 、 、 等。 7.某场篮球联赛中,有5个班级的比赛积分依次为14,11,13,8,9。若 采用冒泡排序算法从右到左对其进行升序排序,则第二轮排序后的结果是 ( ) A.8,11,13,14,9 B.8,9,13,14,11 C.8,9,14,11,13 D. 14,13,11,9,8 8.篮球联赛中,有5个班级的比赛积分依次为14,11,13,8,9.若采用冒泡排序算法对其进行从大到小排序,需要排几遍交换几次() A.1 2 B.4 2 C.1 8 D.4 8 9.采用冒泡排序算法对数据序列18,13,15,2,1,20进行排序,第一轮排序后的结果为20,18,13,15,2,1,则完成整个序列的排序需要进行数据交换的次数总共是( ) A.6 B.7 C.8 D.9 10.采用冒泡排序算法对数据序列“7,3,8,2,1,9”进行排序,第一轮排序后的结果为“3,7,2,1,8,9”则完成整个排序需要交换的次数是() A.6次 B.7次 C.8次 D.9次 11.下列关于冒泡排序的叙述,正确的是() A.10个数冒泡排序每一趟都要进行9次数据比较 B.冒泡排序相邻的数据一定要比较并交换 C.冒泡排序相邻的数据一定要比较,但不一定交换 D.冒泡排序是所有排序算法最快的一种算法 参考答案: 1.有序数据 2.数组、链表 3.保持不变、可能改变 4.列表自带的sort方法、内建函数sorted方法 5.下沉(上冒)、上冒(下沉) 6.选择排序、插入排序、快速排序、堆排序、归并排序、桶排序 7.答案:C [解析]据题意:该数组进行从小到大排序第1种情况:从数组第1个到最后一个元素向后 走访数组,进行数据比较,则: 第一趟:14与11比较并交换,14与13比较并交换,14与8比较并交换,14与9比较并交换,数组顺序为:11,13,8,9,14。第二趟:11与13比较,13与8比较并交换,13与9比较并交换,13与14比较,数组顺序为:11,8,9,13,14.这种情况,选项里没有答案,故放弃。第2种情况:从数组最后一个到第1个元素向前走访数组,进行数据比较,则:第一趟:9与8比较,8与13比较并交换,8与11比较并交换,8与14比较并交换,数组顺序为:8,14,11,13,9。第二趟:9与13比较并交换,9与11比较并交换,9与14比较并交换,9与8比较,数组顺序为:8,9,14,11,13。故选:C。 8.答案:A [解析]据题意:该数组进行从大到小排序,有两种情况:第1种情况:从数组第1个到最后一个元素向后走访数组,进行数据比较,则:第一趟:11与13交换,数组顺序为:14,13,11,8,9,第二趟:8与9交换,数组顺序为:14,13,11,9,8,排序完成;所以第1种情况共排序2遍,交换2次。第2种情况:从数组最后一个到第1个元素向前走访数组,进行数据比较,则:第一趟:9与8交换,13与11交换,数组顺序为:14,13,11,9,8,排序完成,所以第2种情况共排序1遍,交换2次。故选:A。 9.答案:D [解析]数据序列“18,13,15,2,1,20”进行排序,第一轮排序后的结果为“1,18,13,15,2,20”,可知冒泡算法的思想进行升序排列数组,要完成最终的排序需要进行9轮比较最终完成故选:D。 10.答案:C [解析]本题的6个数据“7,3,8,2,1,9”,第一次:“3,7,2,1,8,9”,交换次数为3次,第二次:“3,2,1,7,8,9”,交换次数为2次,第三次,“2,1,3,7,8,9”交换次数为2次,第四次1,2,3,7,8,9,交换次数为1次,总次数为3+2+2+1=8次。故选:C。 11.答案:C [解析]由冒泡排序算法基本思想知:依次比较两个相邻的数据,如果顺序错误就交换它们,所以相邻的数据一定会比较,但不一定交换,所以B错误,C正确;冒泡排序中,几个数要进行n -1次比较,在第j趟中要进行n-j趟比较,所以A错误;在排序算法中,根据原始数据的不同,不同算法的效率不一样,速度也不一样,所以D错误。故选C。 课 堂 小 结 课堂小结 一、排序 1.概念 2.存储方式 数组、链表 二、常见的排序算法 1.拓展链接:Python中的排序函数 列表自带的sort方法、内建函数sorted方法 2.冒泡排序 (1)概念 冒泡排序是在一系列数据中对相邻两个数依次进行比较和调整,让较大的数“下沉(上冒)”,较小的数“上冒(下沉)”的一种排序技术。 三、排序算法的应用 作 业 设 计 1.用冒泡排序算法对12、34、45、56、66五个数进行升序排序,下列叙述正确的是() A.每一趟都不需要进行数据比较 B.整个冒泡排序的过程都没有数据被交换 C.冒泡排序只能从小到大排序 D.5个数一趟比较4次,要进行4趟比较,所以共进行16次比较 2.采用冒泡排序算法对数据序列“8,3,5,2,0,9”进行排序,第一轮排序后的结果为“0,8,3,5,2,9”,则整个序列完成排序的交换次数是() A.6次 B.7次 C.8次 D.9次 3.对“842715”中的数字进行选择排序中的两遍“加工”即为某密码锁 的密码,则该密码可能是( ) A.842715 B.142785 C.872415 D.124578 4.对5个数字“2、8、6、1、7”进行两遍冒泡排序后即为某密码锁的密码,该密码可能是() A.12687 B.12867 C.28617 D.12678 5.下面关于冒泡排序说法正确的是() A、只能从小到大排序 B、可以一次比较三个以上的元素 C、当比较的两个数逆序时,交换顺序 D、只能比较数据 6.对下列一组原始数组:13,15,2,11,8,18进行选择排序,第一趟排序介绍,数组的状态不可能是() A.2,15,13,11,8,18 B.18,15,2,11,8,13 C.13,15,2,11,18,8 D.13,15,18,11,8,2 7.某 Python程序如下: a=[3,1,9,7,6,3] n=len(a) for i in range(1,n): for j in range(n-2,i-2,- 1): if a[jka[j+1]: a[j],a[j+1]=a[j+1],a[j] 程序运行后,数组a的值是() A.[9,3,1,7,6,3] B.[9,7,6,3,3,1] C.[1,3,3,9,7,6] D.[1,3,3,6,7,9] 8.有如下python程序段: a =[33,24,45,16,77 for i in range (0, 2): for j in range (4,i,-1): if a|j]> a[i]: a|j],a[i]=a[i],alj] 经过该程序段“加工”后,数组元素a的值依次为() A.77,45,33,16,24 B.77,33,45,16,24 C.77,24,45,16,33 D.77,45,33,24,16 9.有如下python程序段: a = [0]*6 b =[76,88, 84, 91, 99, 80] for i in range (6): for j in range (i + 1, 6): if b[j] > b[: a[i]+=1 else: a[j]+=1 print(a) 该程序段运行后,列表a的值为() A.[5,2,3, 1,0,4 B.[0, 3, 2, 4,5, 1] C.[10,6, 4,8, 12,2] D.[6,3, 4,2,1,5] 10.有如下程序段 a=[8,1,2,6,3,4,7,5] n=len (a) for i in range (0,n,2) for j in range(n-1,i*2+1,-1): if aj]<a[j-2]: a[j],a[j-2]=a[j-2],a[j] 则程序运行后,a[4]的值为() A.3 B.4 C.7 D.8 11.运行以下程序段后,输出的列表为() def bubble_sort(L): length=len(L) for i in range(l ,3): for j in range(0,length-i): if L[j]<L[j+1]: temp=L[j] L[j]=L[j+1] L[j+1]=temp A=[6,8,2,4,3,7] bubble_sort(a) print(a) A.[2.3.4.6.7,8] B.[8,7.6.4.3,2] C. [8,6.4.7.3.2] D. 16,8.7,4.3,2] 12.实现某排序算法的部分Python程序段如下 def bubble_sort(L): length=len(L) for i in range(1,5): for j in range(0,length-i): if L[j]<L[j+1]: temp=L[j] L[j]=L[j+1] L[j+1]=temp ans.append(L[length-i]) a=[3,9,2,1,5,2,6] ans=[ ] bubble_sort(a) print(ans) 经过该程序段“加工”后,输出的结果是() A.[9,6,5,3] B. [1,2,2,3] C.[3,9,2,1] D.[6,2,5,1] 13.有如下Python 程序段: A=[15,20,11,6,12,8,7,3] for i in range(1,3): for j in range(0,8-i): if a[j]>a[j+1]: a[j],a[j+1]=a[j+1],a[j] 程序段运行后,数组a中的数据依次为 A.3,6,7.8.11.12.15,20 B15,11.6,12,8,7.3,20 C.11,6,12,8.7,3,15,20 D.6,11,8.7.3.12.15.20 14.有如下 python 程序段: n=6 a = [] for i in range(3): for j in range(n - i - 1): if a[j]>a[j+1]: a[j],a[j+1]=a[j+1],a[j] print(a) 数组元素a(1)到a(6)的数据依次为“50,31,18,42,37,23”,则此程序运行完成后数组元素的数据依次是(  ) A. 50,42,37,31,23,18 B. 18,23,31,50,37,42 C. 18,31,23,37,42,50 D. 18,23,31,37,42,50 15.有如下Python程序段 a= 51,73,74,85,94,88 cnt=0 for i in range (len(a)-1,0,-1): flag = False for j in range (i): if a[j] > alj+ 1]: alj], a[j+ 1]= a[j+ 1],a[j] flag = True cnt+=1 if not flag: break 则程序运行后,cnt的值为() A.0 B.1 C.2 D.3 16.有如下Python程序段: a=[40,14,10,19,24,45];n=len(a) for i in range(n-1): Flag=False for j in range (n-1,i,-1): if a[j]>a[j-1]: a[j], a[j-1]=a[j-1], a[j] Flag=True if not flag: break 执行该程序段后,下列说法正确的是() A.该程序实现将数组a升序排序 B.元素14在程序运行过程中被交换2次 C.该程序的时间复杂度为〇(n) D.程序结束后,i的值为3 17.某Python程序如下 for i in range(2,12): if 12%i == 0: Mn=i break 程序运行后,变量mn的值是() A.1 B.2 C.6 D.12 参考答案: 1.答案:B [解析]题中五个数已经是升序数列了,所以在进行冒泡排序时虽然还进行比较,但是不会进行数据的交换.5个数只有第一趟比较4此,找到了最小值后比较就会少一次.故选:B. 2.答案:D [解析]本题的6个数据,835209第一次:083529,交换次数为4次(“8,3,5,0,2,9”,“8,3,0,5,2,9”,,0,3,5,2,9”,“0,8,3,5,2,9第二次:028359,交换次数为3次(“0,3,2,5,9”,“0,8,2,3,5,9”,2,8,3,5,9”),第三次,023859,交换次数为1次(“0,23,8,5,9”)第四次,023589,交换次数为1次(“0,23,5,8,9”),总次数为4+3+1+1=9次。故选:D。 3.答案:.C [解析]如果选择升序排序,第1遍后为142785.找到最小的值与第1个位置交换,其他不动。第2遍后为124785。如果选择是降序排序,第1遍后为842715.因为第1个位置数本身是最大,不用交换。第2遍后为872415。第二大的数与第2位置数交换。 4.答案:A [解析]据题意:从4个答案可以看出这密码是从小到大排列的,有两种情况:第1种情况:从数组第1个到最后一个元素向后走访数组,进行数据比较,则: 第一趟:2与8比较,8与6比较并交换,8与1比较并交换,8与7比较并交换,数组顺序为:2、6、1、7、8; 第二趟:2与6比较,6与1比较并交换,6与7比较,7与8比较,数组顺序为:2、1、6、7、8,选项中没有次序列,故此种情况放弃。 第2种情况:从数组最后一个到第1个元素向前走访数组,进行数据比较,则: 第一趟:7与1比较,1与6比较并交换,1与8比较并交换,1与2比较并交换,数组顺序为:1、2、8、6、7; 第二趟:7与6比较,6与8比较并交换,6与2比较,2与1比较,数组顺序为:1、2、6、8、7,这是选项A的数组。 故选:A。 5.答案:C [解析]冒泡排序是在一系列数据中对相邻两个数依次进行比较和调整,让较大的数“下沉(上冒)”,较小的数“上冒(下沉)”的一种排序技术。冒泡排序算法把待排序的n个元素的数组看成是垂直堆放的一列数据,对相邻两个数进行比较,将较小的数据换到上面的一个元素中(或将较大的数据换到下面的一个元素中)。 6.答案:C [解析]如果该数组升序排列,会有两种排序情况:①第一趟排序要在所有数里选择最小数2,把它与第一个数13交换位置,放在数组最前面,得到数组为:2,15,13,11,8,18,故A选项正确; ②第一趟排序要在所有数里选择最大数18,即数组最后一个数,所以不发生数字交换,故第一趟排序结束后,数组还是原来的顺序,如果该数组降序排列,也会有两种排序情况: ①第一趟排序要在所有数里选择最小数2,把它与最后一个数18交换位置,放在数组最后 面,得到数组:13,15,18,11,8,2,故D正确; ②第一趟排序要在所有数里选择最大数18,把它与数组第一个数13交换位置,放在数组最前面,得到数组:18,15,2,11,8,13,故B正确; 综上:第一趟排序后,选项A、B、D,或者数组原来顺序 4种情况会出现,只有C的数组不会出现;故选C。 7.答案:B [解析]程序功能是使用冒泡排序算法对数组a进行降序排序。注意比较的两个相邻元素是a[j}和a[j+1],故变量j的取取值范围为 range(n-2,i-2,-1)。 8.答案:A [解析].foriinrange(0,2):外循环次数=2,内循环forjinrange(4,i,-1):,内循环i.fa [j] > al]:a|j]与a[]交换,i=0,第一次比较完成后a =[77,24,45,16,33],i=1第二次比较完成后,a=[77,45,33,16,24,A选项正确。故选:A。 9.答案:A [解析]阅读程序段可知,程序实现的是列表中元素的降序排列,各元素下标的交换次数,已知列表[76,88,84,91,99,80]中76为最小的元素,所以需要比较5次,故a中对应的元素为5,同理分析后面的元素得到[5,2,3,1,0,4]。故选:A。 10.答案:B [解析]阅读程序可知,外循环i的取值分别为0,2,4,6。当i=2时,内循环j的取值范围最大为[7,2],此时的排序适用于整个数组,根据 a[j]<a[j-2]的条件进行交換a[j],a[j-2]=a[j-2],a[j]的值后,最终得到a[4]的值为4,因为第一个元素的下标为0。故选:B。 11.答案:C [解析]观察代码“foriin range(1,3)”,变量i只执行两次,循环体是利用冒泡排序,从前往后比较实现降序。i=1执行完后a的状态为[8,6,4,3,7,2],i=2执行完后a的状态为[8,6,4,7.3,2],所以答案选C。 12.答案:B [解析]该程序中,兩数bubble_sort(L)是利用冒泡排序的思想对数组L按从前往后比较方式进行降序排序,一趟加工完成后最后面的元素是当前的最小数据,将该元素添加进数组ans,所以第一趟完成后数组ans中的元素是[1],观察到i的循环范围是1~4,即只进行4趟比较与交换,数组ans中依次记录[1,2,2,3],因此正确答案是B。 13.答案:C [解析]本题主要考查的是冒泡排序。本题的功能是将数组a中的数据进行升序排序,求排序两遍后的数据序列情况,第一遍排序后的结果为“15,11,6.12.8,7,3,20”,第二遍排序后的結果为“11,6,12.8.7,3,15,20”,因此等案为C。 14.答案:C [解析]第一步:if a(j)>a(j+1)→从小到大排序,现在确定最大→排除A;第二步:50,31,18,42,37,23(i = 1)→31,18,42,37,23,50(i = 2)→18,31,37,23,42, 50(i = 3)→18,31,23,37,42, 50。故选C。 15.答案:B [解析]本题考查的python程序的调试与运行。Por语句是循环语句,它的格式是:For变量=初值To终值|Step步长]循环体Nert变量。Range (start, stop[,step])start:计数从start开始。默认是从0开始。例如range(5)等价于range(0,5);stop:计数到stop结束,但不包括stop。阅读程序可知,本程序段实现的是数据的升序排列,需要交换的元素只有94,88,所以共执行一次交换,得到cnt的值为1。故选:B。 16.答案:D [解析]本题主要考查排序算法及Python程序实现。该程序实现将数组a降序排序;元素14在程序运行过程中被交换3次;该程序的时间复杂度为0(n2);当i-3时,a已有序,因此程序结束后,i的值为3,故本题选D选项。 17.答案:B [解析]循环变量i的范围为2~11,若12能被i整除,则将i的值赋给变量mn,并使用break退出循环,所以变量mn存储的是12除1以外的最小因数,结果为2. 反 思 评 价 本堂课讲解的是排序算法方面的知识,比较难懂,只有通过大量的举例来充实课堂。通过列举实例,分析排序算法和冒泡算法的概念和特性,让学生们通过实际问题,恰当地选择排序算法的方法,并总结排序算法的概念、特性及基本操作。体验用排序算法解决问题的基本流程,逐步形成运用排序算法解决问题的思维方式和学科方法。最终能够熟练掌握排序算法的基本操作。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $$

资源预览图

5.3 数据排序(教学设计)信息技术浙教版2019选择性必修1
1
5.3 数据排序(教学设计)信息技术浙教版2019选择性必修1
2
5.3 数据排序(教学设计)信息技术浙教版2019选择性必修1
3
所属专辑
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。