Scratch少儿编程练习:列表排序
更新时间:2024-11-06 08:09 浏览量:5
今天我们将进行有关列表、排序算法的应用练习。题目来源于电子学会Scratch四级考试的压轴真题,因此会有一定难度。但是,请小朋友们放心,我们会用最简单的方式,跟大家一起思考如何解决这一类问题。
题目要求
1. 点击开始,生成一个包含5个(从1到99之间)随机数的列表。
2. 5秒后,程序开始执行排序过程。
3. 按照从小到大顺序,依次将“随机数列表”中的5个数字,逐迁移到“排序后列表”中。为了便于观察迁移过程,每迁一个数字,等待2秒钟。
4. “排序后列表”的5个数字,按从小到大顺序排列。
思考过程
1. 生成随机数列表
在本练习中,需创建两个列表变量:“随机数列表”和“排序后列表”。可通过指定生成数量和最大值,使用循环向列表中插入数字。
为什么要把生成随机数的过程,写成自定义积木的方式?主要是希望小朋友们能慢慢形成“模块化”编程的概念。就好像我们可以把所有东西都丢在房间里,也可以先分门别类地放到盒子里,再有序地把盒子堆放到房间里面。小朋友们,你们觉得哪种方法让房间看起来更整齐、舒服?在要用的时候找起来更方便呢?
2. 整体处理思路
对“随机数列表”中的数据进行反复比对,每一轮找出目前“最小的数”,把它放插入到“排序后列表”中,并在原列表中删除。反复对比,直到“随机数列表”被全部搬空(即项目数变为0)。
3. 从小到大找出数字
按“从小到大”依次找出“随机数列表”中的数字,就必须进行比较。我们要采用怎么样方式来实现呢?既然是作比较,就必须要有参照物,所以需要创建一个变量“最小值”,用“最小值”去和列表中的每一个数字进行比较。在每一轮的对比当中,列表中有几个数字,就需要对比几次。
“当前位置”:标识当前正在跟“最小值”对比的数字,在列表中所处位置。从第一位,一直对比到最后一位(列表长度【项目数】:即最后一个数字的位置)。
“最小值”在跟列表中数字进行对比的过程中,如发现比自己更小的数字,则将“最小值”设置为该数字。
为什么需要记录“最小值位置”?题目要求将数字从“随机数列表”迁到“排序后列表”中,因此需要记录下每一轮“最小值”的位置,才能用“删除列表中第...项”的积木将其剔除。
而且,通过删除掉“随机数列表”中已迁移的数字,也可减少下一轮对比的次数。
4. 设置 “最小值”的默认值
每一轮对比之前,参照物“最小值”的默认值可将其设置为“随机数列表”中的第一项数字。假如它本身就是最小值,则已正确设置,无任何影响;假如后面还有比它小的值,也会被重新设置。
需要注意:在设置“最小值”时,还应同步设置“最小值位置”,否则会导致后面“删除旧数据、写入新列表”的过程出现异常。
5. 新列表按从小到大排序
按照Scratch中列表的处理原则,最先写入的数据排在最前面。在对“随机数列表”筛选的过程中,已按从小到大顺序进行,因此按筛选顺序依次将其加入到新列表中即可。
编程实现
解题方式多样,程序可正确满足实验要求即可。现提供参考示例如下: