教程资源|Scratch不能实现冒泡法和选择法排序?

网友投稿 2019-11-28 10:48

排序是程序设计中重要的算法之一,比较基础的排序方法有冒泡法和选择法,今天我们用Scratch制作一个模拟冒泡法和选择法排序的程序。让我们先看看运行效果吧。

一、效果预览

点击小绿旗运行后,舞台区生产40个大小不同的红色棒图。根据提示按下键盘上的空格键可以通过输入1或2选择冒泡法排序和选择法排序。如果输入1,红色棒图按照冒泡法排序的规则从小到大排列;如果输入2,红色棒图按照选择法排序的规则从小到大排列。效果如图1所示。

https://cdn.china-scratch.com/timg/191130/104T54040-0.gif

图1 程序运行效果

二、冒泡法和选择法排序简介

1.冒泡法

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序与目标不符,就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序时,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并不会改变,所以冒泡排序是一种稳定排序算法。

2.选择法排序

选择排序(selection sort),另外一种计算机科学领域的较简单的排序算法。工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置或者末尾,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的起始位置或者末尾。以此类推,直到全部待排序的数据元素排完。

这种算法排序过程需要反复从未排序元素中选择最大或者最小元素,直至完成排序。因此,将这种算法称为选择排序算法。

由于在选择的过程中,相同的元素有可能改变初始排列顺序,所以选择排序是不稳定的。

三、程序制作过程

首先,从库中选择一个合适的背景图。然后需要导入红色线条素材,作为棒图角色(也可以绘制),然后再建立一个空白角色。设置完成后的背景和角色如图4所示,另外还导入一个合适的声音素材,作为排序完成后的提示音。

https://cdn.china-scratch.com/timg/191130/104T63K6-1.jpg

图2 程序角色列表

接下来就是制作程序积木块了。在制作程序积木块前,先设置如图3所示变量。其中,克隆体编号、克隆体大小为棒图角色的私有变量。

https://cdn.china-scratch.com/timg/191130/104TV0Q-2.jpg

图3 程序中设置的变量

为了存放棒图角色克隆体的编号和大小数据,设置了两个列表,如图4所示。其中,克隆体编号列表用于存放克隆体的编号;随机数列表用于存放克隆体的大小。

https://cdn.china-scratch.com/timg/191130/104T93S8-3.jpg

图4 程序中设置的列表

背景中的脚本主要用于程序初始化,如图5所示

https://cdn.china-scratch.com/timg/191130/104U2MU-4.jpg

图5 背景中脚本

空白角色中主要有[当小绿旗被点击]事件下的脚本和[当按下空格键]事件下的脚本,如图6和图7所示,另外[当按下空格键]事件下的脚本中还用到了自定义积木,其功能如图8和图9所示。

https://cdn.china-scratch.com/timg/191130/104U35E0-5.jpg

图6 空白角色[当小绿旗被点击]事件下的脚本

https://cdn.china-scratch.com/timg/191130/104U33Y7-6.jpg

图7空白角色[当按下空格键]事件下脚本

https://cdn.china-scratch.com/timg/191130/104U31395-7.jpg

图8 寻找最大值自定义积木

https://cdn.china-scratch.com/timg/191130/104U42423-8.jpg

图9 寻找最大值项自定义积木

棒图角色中脚本有[当接收到生成克隆体]事件下脚本、[当作为克隆体启动时]事件下脚本、[当接收移动克隆体冒泡法]事件下脚本、[当接收移动克隆体选择法]事件下脚本,分别如图10-13所示。

https://cdn.china-scratch.com/timg/191130/104U450Y-9.jpg

图10 棒图角色[当接收到生成克隆体]事件下脚本

https://cdn.china-scratch.com/timg/191130/104U43427-10.jpg

图11 棒图角色[当作为克隆体启动时]事件下脚本

https://cdn.china-scratch.com/timg/191130/104U42214-11.jpg

图12 棒图角色[当接收到移动克隆体冒泡法]事件下脚本

https://cdn.china-scratch.com/timg/191130/104U43946-12.jpg

图13 棒图角色[当接收到移动克隆体选择法]事件下脚本

四、测试与总结

通过测试发现,冒泡排序法和选择排序法运行正常,可以直观地观察到排序的过程。本案例综合运用变量、列表和克隆的相关技巧模拟了冒泡排序和选择排序过程,适合具有一定编程基础的编程爱好者和小朋友学习。通过本案例的制作,可以进一步加深对变量积木、列表积木、克隆体操作积木、过程控制积木等的理解,有利于更熟练掌握它们的使用方法。制作时需要注意,克隆体编号和克隆体大小两个变量必须设置为“仅适用当前角色”。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com