欢迎光临
我们一直在努力

第四十一讲:用scratch做选择排序

上次跟大家讲了基本的三种排序方法,那么CC哥还是用scratch把这三种算法一一跟大家演示一遍,虽然其实C++编写算法更容易和简单。但是对小朋友来说,用scratch来设计更生动一些吧。而且也可以好好训练一下逻辑思维的能力。

这个算法其实很简单,让我们来先回忆一下什么是选择排序。

一:选择排序

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。

排序过程

对以下序列进行排序:(例子摘自网上)

49 38 65 97 76 13 27 49

第一趟排序后 13 [38 65 97 76 49 27 49]

第二趟排序后 13 27 [65 97 76 49 38 49]

第三趟排序后 13 27 38 [97 76 49 65 49]

第四趟排序后 13 27 38 49 [76 97 65 49]

第五趟排序后 13 27 38 49 49 [97 65 76]

第六趟排序后 13 27 38 49 49 65 [97 76]

第七趟排序后 13 27 38 49 49 65 76 [97]

最后排序结果 13 27 38 49 49 65 76  97

这个上一讲已经讲过了,所以编程思路也不复杂,就是一个嵌套的循环。外循环是挑出要比较的数字,内循环是把外循环挑出的数字与剩下需要比较的数字一一比较,如果有比它小的就记下来,比完之后就与最小的数字做交换。

对于计算机来说,如果两个变量要交换数值,一般来说要引入一个第三方变量来做临时变量才能成功交换。比如要实现x和y的数字交换,那需要引入一个temp。 1定义一个中间变量temp;2将变量x的值存储到temp中;3将变量y的值存储到x中;4将temp中的x的值存储到y中。但是如果要交换的只是数字的话,也有不需要引入中间变量的方法,大家可以思考一下是什么,想出来了给CC哥留言。

让我们来看看代码:

这一段程序是让程序自动产生一组要排序的数字。用了列表来存储要排序的一组数字。用了连接命令把想说的话连接起来。中间有一个自定义的积木,自定义的积木主要是把所有的数字之间加入一个‘,’。

这一段是自定义的积木,要排序队列这个变量就是把所有的数字之间加上逗号,然后存放到这个变量中用来显示用。

以上这两段程序跟排序无关的,只是为了让程序生动一些,同时可以让大家再熟悉一下字符串的操作。

让我们来看排序的部分:

别看这个程序不复杂,但是这些变量有没有让大家读的时候晕过去。,用scratch做算法的时候,其实最容易出错的就是变量,因为各种算法都需要大量的变量。大家如果学C++的时候,有时候C++用一条语句就定义了十几个变量,写起来很简单,就跟做代数题似的。比如:

int a, b, c

那c是多少?

但是scratch就需要用积木来做变量定义,麻烦一些,也不太好阅读,好在scratch3.0可以支持中文名称的变量,所以还好一些。

写这种程序的时候如果配合流程图会简单些,不过这么简单的就算了。但是也有个技巧教给大家,这样不容易错,而且思路会很清晰,就是由外往内,先搭框架再填内容。

第一步:先把框架搭起来,i作为外循环的变量,j作为内循环的变量,外循环要比n-1次,内循环要比n-i次。j每次的循环要从i+1开始。(i和j都是代表了队列里面要排序比较的数字的序号)把这个循环框架搭好了,那整个程序的逻辑就不容易错了。

然后我们开始把临时变量以及变量m次用来存储比较后较小的数字和队列中的序号。

然后我们再把比较放进去。

最后再把队列里的数字交换放进去。再把显示的部分加进去就完工了。这样做调理性更强,也不容易出错。

用scratch做算法虽然没有做游戏那么好玩,但是还是很锻炼我们逻辑思维能力和严谨性的。

如果觉得CC哥做的不错,请点击右下角的"好看",给CC哥一个鼓励!

超乎想象的使用体验

历史课程:

赞(84)
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址