内容正文:
第5单元 把数据排列有序
冒泡排序齐体验(2)
第19课
人教版·五年级
学习目标
01
课堂导入
02
新知探究
03
知识总结
04
智慧挑战
05
兴趣园地
06
目录
CONTENTS
2
PART 1
学习目标
进一步认识冒泡排序算法,能够对一组数据进行排序过程分析。
学习目标
能够用程序验证排序算法,观察数据的排序过程,培养用算法解决问题的意识。
PART 2
课堂导入
课堂导入
上一课我们通过“排队”活动,体验了冒泡排序的算法步骤,下面通过对数据进行排序,分析冒泡排序的过程,并利用程序进行验证与实现。
冒泡排序
PART 3
新知探求
新知探究
学习活动1
活动1:冒泡排序的过程分析
新知探究
学习活动1 冒泡排序的过程分析
任务1:把最大数交换到最后
利用冒泡排序算法,把最大数排列到最后(最右侧)
新知探究
第 1 步:比较第一个数和第二个数
7 > 5,交换位置
学习活动1 冒泡排序的过程分析
任务1:把最大数交换到最后
新知探究
第 2 步:比较第二个数和第三个数
7 < 9,不交换位置
学习活动1 冒泡排序的过程分析
任务1:把最大数交换到最后
新知探究
第 3 步:比较第三个数和第四个数
9 > 3,交换位置
学习活动1 冒泡排序的过程分析
任务1:把最大数交换到最后
新知探究
第 4 步:比较第四个数和第五个数
9 > 6,交换位置
学习活动1 冒泡排序的过程分析
任务1:把最大数交换到最后
新知探究
第 5 步:比较第五个数和第六个数
9 > 8,交换位置
学习活动1 冒泡排序的过程分析
任务1:把最大数交换到最后
新知探究
第二轮:返回最左边,在第一个至第五个数中,通过比较、交换找到它们中的最大数,把它排到第五的位置。
学习活动1 冒泡排序的过程分析
任务2:按数值从小到大排序
第一轮:把最大数交换到最后,前面已经完成。
新知探究
第三轮:返回最左边,在第一个至第四个数中,通过比较、交换找到它们中的最大数,把它排到第四的位置。
学习活动1 冒泡排序的过程分析
任务2:按数值从小到大排序
新知探究
第四轮:返回最左边,在第一个至第三个数中,通过比较、交换找到它们中的最大数,把它排到第三的位置。
学习活动1 冒泡排序的过程分析
任务2:按数值从小到大排序
第五轮:返回最左边,比较第一个和第二个数,把较大的数排到第二
的位置。
新知探究
补全流程图
第 1 轮需要比较6-1=5 次,
第 2 轮需要比较 4 次,
第 3 轮需要比较 3 次,
第 4 轮需要比较 2 次,
第 5 轮需要比较 1 次。
学习活动1 冒泡排序的过程分析
在以上排序过程中,一共进行了多少次数值比较的操作?
讨论
总的比较次数为 5+4+3+2+1=15 次
右侧数
交换两个数位置
右移
1
1
最后
1
新知探究
学习活动2
活动2:验证冒泡排序的算法
新知探究
观察、运行冒泡排序的程序,体会算法的实现。
data=[65,3,25,129,311,93,88,156,72,29,336,168,108,27]
print('排序前数据:',data)
n=len(data)
i=0
while i<n-1:
j=0
while j<n-i-1:
if data[j]>data[j+1]:
data[j],data[j+1]=data[j+1],data[j]
j=j+1
print(f'第{i+1}轮遍历:{data})
i=i+1
print('排序后数据:',data)
学习活动2 验证冒泡排序的算法
#输出排序前数据
#完成一轮排序,进入下一轮
#获取列表数据的个数
#外层循环,控制排序的轮数
#内层循环,找到未排序数中的最小值
#如果前一个数大于后一个则交换位置
#初始化最小值的变量
#输出排序后的数据
双重
循环
PART 4
知识总结
知识总结
冒泡排序的过程分析
把最大数交换到最后
按数值从小到大排序
验证冒泡排序的算法
流程图描述冒泡排序算法
PART 5
智慧挑战
2.关于冒泡排序的特性,下面哪个说法是正确的?
A. 冒泡排序在排序过程中,相等的两个数一定会交换位置
B. 冒泡排序每进行一轮,就会有一个数被放到它的最终位置
C. 无论数据原来是否部分有序,冒泡排序都需要同样多的比较次数
D. 冒泡排序比其他排序方法(如选择排序)快很多
1.小华写了以下伪代码来描述冒泡排序:
这段代码中存在一个逻辑问题,会导致什么后果?
A. 永远不会交换任何元素
B. 可能会陷入死循环
C. 只能排序一次就结束
D. 排序结果总是错的
智慧挑战
智慧挑战
解析:仔细看代码:它先把交换标志设为真,然后如果发生交换又设为假。但问题在于,如果一轮中有交换,标志会被设为假;一轮结束后判断“如果交换标志为真则结束”,但既然有交换标志已是假,所以永远不会满足结束条件!即使排序已完成,程序也会一直循环下去。这就是“死循环”没发生任何交换),才提前结束。
答案:B
解析:冒泡排序的“泡泡上浮”特性:每浮上去一个泡泡(最大数),它的位置就固定了。
答案:B
设置一个交换标志为假
重复执行以下步骤直到没有发生交换:
将交换标志设为真
对每一对相邻元素比较,如果顺序错误就交换,并将交换标志设为假
如果一轮结束后交换标志为真,则提前结束
PART 6
兴趣园地
兴趣园地
“报数”排序游戏
按在 10 张卡片上分别写下一个 50 以内的自然数,随机分发给 10 位同学,然后选一位同学出来从 1 开始报数。当报的数与某张卡片上的数相同时,该同学就手持卡片站出来。继续报数,直到 50 为止,手持卡片的同学按先后顺序站成一排,这时发现,这 10 个数已经按顺序排列。
用计算机解决同一问题时,往往会有不同的算法和不同的程序实现方法。
用计算机解决排序问题时,也可以用以“报数”的方法。计算机按顺序数数,当数到的数与参与排序的某个数相同时,这个数就会被加入已排序数的队列中。
兴趣园地
for 循环语句
在 Python 中,for循环和while循环都是用来重复执行一段代码的结构
for 循环语句的基本格式:
for 变量 in 序列 :
循环体
range( ) 可以用来生成一个数据序列
range( ) 的基本格式:
range(开始值 , 结束值 , 步长值)
while 循环语句的基本格式:
while 条件:
循环体
用于已知重复次数的情况
用于未知重复次数,但满足某个条件时继续执行的情况
大多数情况下,while 循环和 for 循环两者可以互相改写,但每一种方式大都有与其相适应的应用场合。
谢谢
下节课见!
Thanks!
人教版·五年级
$