冒泡排序的算法及其程序实现

上传人:cn****1 文档编号:509164541 上传时间:2023-11-23 格式:DOCX 页数:10 大小:375.83KB
返回 下载 相关 举报
冒泡排序的算法及其程序实现_第1页
第1页 / 共10页
冒泡排序的算法及其程序实现_第2页
第2页 / 共10页
冒泡排序的算法及其程序实现_第3页
第3页 / 共10页
冒泡排序的算法及其程序实现_第4页
第4页 / 共10页
冒泡排序的算法及其程序实现_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《冒泡排序的算法及其程序实现》由会员分享,可在线阅读,更多相关《冒泡排序的算法及其程序实现(10页珍藏版)》请在金锄头文库上搜索。

1、冒泡排序的算法及其程序实现教学分析:本节课是浙江教育出版社出版的普通高中课程标准实验教科书算法与程序设计第 二第 3 节以及第五章第3 节的部分教学内容。一组不长的数据(如5 个),从小到大排序,对学生来说是一件容易的事情,但他们并 不知道计算机是怎么实现排序的,同时他们也没见识过计算机对大量数据(如1000 个)的 排序。学习排序有助于学生对计算机工作原理的认识。冒泡排序对学生来说初次接触,但前 面的枚举算法和解析算法的部分内容对学习排序有一定的帮助,如数组变量的定义及使用方 法、双重循环的使用方法及特点以及如何通过键盘输入一批数据(即textl_keypress()事件) 在前面都已涉及,

2、冒泡排序的学习又可以巩固前面的知识。关于冒泡排序的算法及程序实现我安排了3个课时,本案例是在教室内完成的2节随 堂课,第3 课时安排学生上机实践:对键盘输入的一批数据进行冒泡排序。教学目标:l 、知识与技能:了解排序及冒泡排序的概念及特点掌握冒泡排序算法的原理初步掌握冒泡排序的程序实现2、过程与方法: 理解冒泡排序的分析过程,并初步掌握用冒泡排序算法来设计解决简单的排序问题3、情感态度与价值观:通过冒泡排序算法的分析过程,培养学生思维的严谨性以及用科学方法解决问题的能力 使学生深入理解计算机的工作原理,激发了学生学习程序兴趣。教学重点:冒泡排序算法的原理教学难点:分析冒泡排序的实现过程教学策略

3、:讲授法与探究法。教师讲授、学生听讲,教师提问、学生动脑,层层深入,步步为营 一切水到渠成。教学准备:编写好手动输入一批的数据的冒泡排序的程序 编写好计算机自动生成数据的冒泡排序的程序 课堂中使用的教学课件教学过程:一、问题引入问题一:什么是排序?所谓排序,把杂乱无章的一列数据变为有序的数据,比如 7,3,4,8,l 这五个数据从 小到大排序,结果是1,3, 4, 7, 8,我们很容易排出来。那么电脑是怎么进行排序的呢? 问题二:一批数据在VB中如何存储的?比如如何存储六位裁判为一位运动员评出的分数? 用数组变量来存储一批类型、作用相同的数据,如分别用d(1),d(2),d(3),d(4),d

4、(5),d(6)来存 储六位裁判给出的分数。问题三:如果运动员的最后得分是从这6个分数中去掉最高分与最低分后的平均分,你认为怎么得到?调整数组d中所有数据的存储位置,使最小的数据存储在d(l)中,最大的数据存储在 d(6)中,使所有数据满足:d(1) Wd(2) Wd(3) Wd(4) Wd(5) Wd(6)二、冒泡排序的算法及程序实现1、冒泡排序(bubblesort)的思想在一列数据中把较小的数据逐次向上推移的一种技术。冒泡排序把待排序的n个元素的 数组看成是垂直堆放的一列数据,从最下面的一个元素起,自下而上地比较相邻的两个元素 中的数据,将较小的数据换到上面的一个元素中。重复这一过程,直

5、到处理完最后两个元素 中的数据,称为一遍加工。当第一遍加工完成时,最小数据已经上升到第一个元素位置。然 后对余下的 n-1 个元素重复上述处理过程,直至最后进行余下两个数据的比较和交换。2、提出待排序的任务有下面一组数据, 7、3、4、8、1,用冒泡法(逐次向上推移)实现从小到大的排序,假如这5个数据分别用数组变量a的5个数组元素a(1)、a(2)、a(3)、a(4)、a(5)来存储变量aa(2)a(3)aa(5)初始73481结果134783、冒泡排序的算法及程序初步实现(1) 第一遍加工:演示:打开冒泡.swf,演示如下图1图1问题一:最小数据1是如何进行逐次向上推移到达第一个数据位置的,

6、即a(1)=1? 演示如下图 2:第五位置(即a(5)的1与第四位置(即a(4)的8比较,交换;第四位置(即a(4)的1与第三位置(即a(3)的4比较,交换;前三位置(即a(3)的1与第二位置(即a(2)的3比较,交换;第二位置(即a(2)的1与第一位置(即a(1)的7比较,交换;图2说明:当第五个位置的数据1 从上升到第一个位置,称为第一遍加工 问题二:第一遍加工的结果?a(l)=l, aa(5)为无序区域。问题三:比较了几次?交换了几次?比较交换的条件是什么?比较4次,交换4次,即相邻位置的两个数据比较,如果a(j)a(j-1),则交换问题五:4次比较与交换,可以用VB的哪个算法模式来实现

7、?如何描述For循环+If选择for i=5 to 2 step -1if a(i)va(i-1) then 交换 next i根据代码解释:最末位置的数据与前面相邻位置的数据发生比较,如果小于前面位置的数据, 则交换;重复这一过程,直到处理完第二个位置的数据与第一个位置的数据为止,完成第一 遍加工for i=5 to 2 step -1 if a(i)va(i-1) then 交换 next ifor i=4 to 1 step -1 if a(i+1)va(i) then 交换 next i问题六:比较下面两组代码,你认为哪组好?为什么?第一组好,因为第一组更清楚表达第一遍的加工过程,也更

8、易理解。(2) 第二遍加工(边提问边回答,边演示,如图3)图3问题一:第二遍加工的数据区域为哪些?过程是怎样的?数据区域为 a(2)a(5) 的无序的区域第五个位置的 8 与第四位置的 4 发生比较,不交换;第四个位置的4 与第三个位置的 3 比较,不交换;第三个位置的3与第二个位置的7比较,交换;完成第二遍加工(见图3) 问题二:第二遍加工的结果怎样?实现的代码如何?结果a(2)=3, a(3)a(5)是无序区域代码如下:for i=5 to 3 step -1if a(i)va(i-1) then 交换next i问题三:第二遍加工,比较了几次,交换了几次? 比较了3次,交换了1次(3)

9、第三遍加工(边提问边回答,边演示,如图 4) 问题一:第三遍加工的结果、过程又如何?语句呢?第三遍加工的结果:a(3)=4, a(4)a(5)为无序区域 第五个位置的 8 与第四个位置 4 的比较,不交换;第四个位置的 4 与第三个位置的 7 比较,交换;完成第三遍加工实现的语句:for i=5 to 4 step -1 if a(i)va(i-1) then 交换 next i问题二:比较和交换的次数各是多少? 比较了 2 次,交换了1 次(4)第四遍加工 问题一:第四遍加工的结果?实现的代码?第四遍加工的结果:a(4)=7, a(5)=8 实现的语句:for i=5 to 5 step -

10、1if a(i)va(i-1) then 交换next i问题二:第四遍加工比较、交换的次数各多少? 比较了 1 次,交换了0 次4、5个数据冒泡排序的程序实现问题一:五个数据通过冒泡排序,完成从小到大的顺序,需要加工几遍?如果是n个数据呢? 4 遍, n-1 遍问题二: 4 遍加工的共同点是什么?不同点又是什么? 相同点:都是重复比较(循环结构),相同的比较方法和相同的交换条件不同点:比较与交换的次数不一样问题三:4 遍加工是否可以用双重循环来实现? 可以,代码如下:for j=1 to 4 for i=5 to j+1 step -1 if a(i)va(i-1) then 交换 next

11、 inext j说明:对于循环次数确定的循环,比如循环4次,使用For循环,循环变量的变化方式有多 种表达,如 For j=2 to 5 或者 for j=4 to 7 等,但我们选择 for j=1 to 4,因为它是最易理解的 一种表达问题四: 4遍加工一共比较了几次?交换了几次? 比较的次数为: 4+3+2+1=10;交换的次数为: 4+1+1=65、n个数据冒泡排序的通用代码For i=1 to n-1for j=n to i+1 step -1 if a(j)a(j-1) then 互换 next jNext i问题一:在通用代码中,外、内循环的条件各是什么? 外循环的循环条件为:

12、i=i+1(ji) 问题二:在通用代码中,外、内循环的意义是什么?外循环是加工的遍数,n个数据需要加工n-1遍 内循环是每一遍的具体加工过程问题三:如何实现a(j)与a(j-l)的交换?使用什么语句学生回答:通过第三个变量 tempTemp=A(j) A(j)=A(j-1) A(j-1)=Temp6、演示冒泡排序算法.swf,观察流程图,体验流程的执行过程,并请学生用语言表达程序运行过程( 幵始 JNNiWn 1?/的数纽a(结束用换a(j)ja(j-1 )的数据三、对键盘输入的一批数据进行冒泡排序1、关于程序的界面 问题一:你能想象出程序的界面吗? 学生思考后并给展示如下的建议界面:4丄只

13、口人平匕他八就如丿口,y 十雄,4丄心7。匕 41丄内显示输入的数据,依次 输入一批数据,然后单击“冒泡排序”按钮,在列表框list2中显示已排完序的一列数据 问题三:界面上有几个对象?一个窗体(forml )、二个列表框(Iist1、list2)、一个文本框(textl)、一个命令按钮(commandl) 和三个标签(labell、label2、label3)问题四:在哪些对象上发生哪些事件?在 textl 的 keypress 事件和 commandl 的 click 事件 2、编写事件的代码问题一:请尝试编写text1_keypress () 事件的代码Sub Text1_KeyPres

14、s(KeyAscii As Integer)If KeyAscii = 13 Thenc=c+1a(c) = Val(Text1.Text)List1.AddItem a(c)Text1.Text = : Text1 .SetFocusEnd If说:阻值时已使用过,所不同的是增加了计数功能。计数(c=c+l) 给数组变量a赋值 数组变量 的值在 listl 中显示 textl 清空,并把光标聚焦在 textl 中问题二:当在 textl 中用键盘输入回车键后,做些什么内容?问题三:为什么要计数? (c=c+1) 计数是为了统计待排序数据的个数问题四:数组变量a和变量c需要在text1_keypress()事件中定义吗? 不用,作全局性变量处理,在两个模块外添加如下两行:Dim a(1 to 128) as integer Dim c As Integer 说明:全局性变量的处理在计算并联电路的总电阻中已学习过。问题五:如果要手动输入50个待排序的数据,需要执行textl_keypress()事件几遍?50 遍问题六:请尝试编写command1_click()事件Sub Command1_ClickOFor I = 1 To c - 1For J = c To I + 1 Step -1If a(J) a(J - 1) ThenTEMP = a(J

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号