快捷搜索:  汽车  科技

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上。这不就是我们玩牌时整理牌所用的方法吗?起牌时,默认第一张是排好序的,第二张如果比第一张小就插到第一张的前面,然后第三张、第四张……直到完全整理好。今天的算法课开始了。三个人玩跑得快,一个人16张牌。洗牌,发牌,然后呢?起一张牌,按照从小到大的顺序插入到合适的位置,把手上的16张牌整理好,才好发现有没有对子,有没有顺子,有没有三张,有没有“飞机带翅膀”……扯远了。今天的手气可真臭,居然让一个毛孩子赢了一把!“好了!娱乐适可而止!小骞,你还记得你刚才是怎么理牌的吗?”输红了眼的老爸露出狡黠的目光。“嘿嘿,小样!我还治不了你!”

“小骞,来打牌了。”

“今天玩什么呀?”

“来局跑得快怎么样?”

“那要叫上妈妈!”

三个人玩跑得快,一个人16张牌。洗牌,发牌,然后呢?起一张牌,按照从小到大的顺序插入到合适的位置,把手上的16张牌整理好,才好发现有没有对子,有没有顺子,有没有三张,有没有“飞机带翅膀”……扯远了。

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(1)

今天的手气可真臭,居然让一个毛孩子赢了一把!

“好了!娱乐适可而止!小骞,你还记得你刚才是怎么理牌的吗?”输红了眼的老爸露出狡黠的目光。“嘿嘿,小样!我还治不了你!”

今天的算法课开始了。

插入排序算法

插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上。这不就是我们玩牌时整理牌所用的方法吗?起牌时,默认第一张是排好序的,第二张如果比第一张小就插到第一张的前面,然后第三张、第四张……直到完全整理好。

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(2)

(网络图片)

算法流程图如下(红框部分下面会详细说明)∶

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(3)

(纯手绘,很费功夫啊,点个赞吧!)

第一个数据默认是排好序的,所以我们要插入的数据从第二个开始,当插入最后一个数据后,整个列表就排好序了。

Scratch实现插入排序算法

“初始化列表”积木

上一篇已经讲过“初始化列表”积木的实现方法,今天加点难度,初始化10个不相同的数字。

上代码!

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(4)

积木中使用了一个临时变量来存放生成的随机数,然后检查该随机数是否在列表中存在,如果存在则继续取一个新的随机数,直到列表放满。

这个检查的循环逻辑使用了“……不成立”这个判断作为退出条件,后面也会用到哦。

算法实现

接下来按照流程图实现一下算法。

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(5)

算法整个实现还是比较清晰的,代码长度和冒泡排序算法差不多。但流程图中红框框出来的部分的实现可需要动一下脑筋来理解。

只有当“插入位置大于等于1”和“列表[插入位置]大于临时数据”两个条件同时成立时,才去移动数据,否则直接把临时数据放到列表第插入位置 1的位置就可以了。所以,这个循环的退出条件是当“插入位置大于等于1”和“列表[插入位置]大于临时数据”两个条件任何一个不成立或都不成立。

我们把“插入位置大于等于1”称为条件A,“列表[插入位置]大于临时数据”称为条件B,则根据条件A和条件B的判断结果可以得到∶

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(6)

这个判断涉及到逻辑与与逻辑非的数学概念。

于是我们的退出条件也写成了∶

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(7)

这个判断可能是小朋友理解这个算法的难点。

来试试运行效果吧!

scratch编程与算法进阶第二版pdf(程序猿老爸的Scratch算法课)(8)

小结

“小骞,通过玩扑克牌,我们发现了两种不同的排序算法。”

“嗯!打牌可有意思了!”

……这不是重点!

“哼嗯哼。这说明,算法的发明不是凭空产生的,而是对日常经验的总结。算法科学家们分析人们日常处理问题的办法,并对其进行抽象和数学分析,再经过严密的逻辑推论,才形成了算法。”我语重心长的说,“比如今天讲的插入排序算法,经过科学家们的优化,发明了希尔排序算法。另外还有需要额外存储空间但排序更快的堆排序和桶排序算法,充分发挥计算机递归运算优势的归并排序及快速排序算法等等。”

……

“爸爸,我们来打牌吧!”

“玩什么玩!快写作业去!”老爸落荒而逃……

猜您喜欢: