APP下载

桶排序

2023-09-21曹晓敏

发明与创新·小学生 2023年9期
关键词:桶子小子长沙市

岭童小子很能干,常常帮助老师们做一些力所能及的事情。例如,每周五他都帮班主任统计每个同学获得的贴纸数量,并给大家排序。全班有45个同学,每个星期都要统计、排序,还不能出一丁点差错,这项任务可不轻松。而且,手工统计不仅麻烦、费时,还容易出错。有没有更好的办法呢?

岭童小子思考了很久也没想出来,他有点着急了。看着岭童小子眉头紧锁的样子,一旁的星空乐了。

我來帮帮你吧。每个同学最多能得到多少个贴纸,请告诉我。

一个星期内,每个同学最多能得到100个贴纸。

好。请依次告诉我每个同学的贴纸数量。

岭童小子将每个同学的贴纸数量依次告诉星空……说完最后一个同学的贴纸数量,星空立马把同学们的贴纸数量按照从少到多的顺序排列了出来。

“怎么样?”星空得意地看着岭童小子。而此时的岭童小子脑袋都是蒙的,他需要好好想一想……

晓敏老师:

哈哈,岭童小子别着急。我们将问题简化一下:假设每个同学最多能获得10个贴纸,班上有5个同学,他们的贴纸数量分别为1、7、3、5、9,请找出贴纸数量最多的3个同学。对于这个问题,我们一眼就能看出答案,但是如何用编程的方法来解决呢?

第一步,准备10个空桶子,将它们按照1—10进行编号。将每个桶子标记为0,表示桶子是空的,如图1。代码见图2,此时的循环控制变量既控制循环次数,又与桶子编号重叠。

第二步,输入第1个同学的贴纸数量1。将1号桶标记为1,表示桶子不是空的。输入第2个同学的贴纸数量7。将7号桶标记为1,表示桶子不是空的。如图3。

第三步,依次输入5个同学的贴纸数量,将相关的桶子标记为1,如图4。代码见图5,此时的循环控制变量控制循环次数。因为有5个同学,所以循环5次,依次输入每个同学的贴纸数量。

第四步,按照10—1倒序检索桶子,检索到的前三个标记为1的桶子,即9号桶、7号桶、5号桶,这三个桶子对应的同学就是贴纸数量最多的3个同学。代码见图6,此时的循环控制变量指桶子编号。

说明:计数器的初始值为1,我们需找到贴纸数量最多的三个同学,所以,重复执行直到计数器为4即可。

同学们,在对一组数据进行排序时,如果知道数据的上限,你就可以用这种方法来排序。将数据分别放入各个桶子,借助桶子的位置完成排序。这就是桶排序算法的基本思路。你看懂了吗?

其实,这里我们忽略了一个问题 :如果有两个同学得到的贴纸数量相同,那该怎么办呢?同学们可以进一步思考哦。

曹晓敏 :湖南省特级教师,湖南省优秀科技辅导员,长沙市首批卓越教师,长沙市骨干教师,长沙市芙蓉区马坡岭小学信息技术教师。

猜你喜欢

桶子小子长沙市
长沙市望城区金地三千府幼儿园
炫酷小子
好动小子王妥妥
别人家的虎小子(下)
长沙市控编减编工作的实践探索
机智题
简述长沙市三种不同边坡支护方式
长沙市:长沙市举行地铁应急逃生演练活动
超级小子
破裂的水桶