vlambda博客
学习文章列表

Scratch算法编程:冒泡排序算法

什么是冒泡排序

冒泡排序是一种简单的排序算法,也是编程中最基本的一种排序方式,其基本思想是:

对数组由后往前依次比较相邻的两个元素,使小的元素像气泡一样不断的上浮到数组前面,最终得到一个由小到大排列的有序数组。


其排序过程可以参考下图:

Scratch算法编程:冒泡排序算法
冒泡排序示意图


冒泡排序过程

为了更好的理解冒泡算法,我们可以使用人人多熟悉的扑克牌来演示具体的算法过程。

准备扑克牌一幅,红、蓝色棋子各一颗,为便于说明,取牌面为2、3、5、7、8的5张纸牌进行排序操作。先将5张牌打乱顺序,一字排开,假定5张牌从左到右依次为8、5、3、7、2。

冒泡排序需要经过多轮排序,每一轮都可以确定一个位置,因此针对5张牌的排序,需要进行4轮排序操作。

第一轮排序:在左边第一张牌上方放置红色棋子,标记为j,在第5张牌上方放置蓝色棋子,并标记为i。然后从右向左依次查看i和i-1位置相邻的两张牌,比较牌面的大小。如果纸牌i小于纸牌i-1,则交换两种位置。然后再将蓝色棋子向左移动一步,重复次操作直到蓝色棋子和红色棋子碰到一起,至此第一轮排序结束,此时,最小的一张纸牌2被移动正确位置,如图所示:

Scratch算法编程:冒泡排序算法

冒泡排序第一轮排序


第二轮排序:将红色棋子向右移动一步,再将蓝色棋子放置到最右端,然后按照前面描述的步骤进行比较和交换,直到蓝色棋子和红色棋子碰到一起,结束第二轮排序,纸牌3被移动到正确位置,排序过程如图:

Scratch算法编程:冒泡排序算法

冒泡排序第二轮排序


第三轮排序:重复上述排序步骤,纸牌5被移到正确位置,如图:

Scratch算法编程:冒泡排序算法

冒泡排序第三轮


第四轮排序:同理,经过第4轮排序,纸牌7被移动到正确位置,而剩下的纸牌8自然也就处于正确位置了,图示如下:

Scratch算法编程:冒泡排序算法

冒泡排序第四轮


至此,经过四轮排序,整个冒泡排序过程结束,5张纸牌已经按照从小到大的顺序排列完成。

编程思路

根据冒泡排序的基本思想,结合扑克牌演示的操作步骤,我们就可以开始编写冒泡排序程序了,整个程序也遵循IPO设计原则,即输入、处理和输出。这里输入的一组无序数据,因此需要列表来保存,接着就是处理的过程,为了方便,我们可以定义一个自制积木专门实现排序过程,最后就是输出排序结果了。

需要注意的是,在实现冒泡排序时,需要交换两个元素的位置,为此,我们需要创建一个交换元素的自制积木来完成这项工作。

代码实现

第一步,先创建一个列表,将其命名为“纸牌”,对列表进行初始化操作,即清空列表,并将无序数据8、5、3、7、2添加到列表中,程序如图所示:

Scratch算法编程:冒泡排序算法

列表初始化


第二步,创建一个自制积木,用于交换两个元素,由于排序和列表有关,因此,自制积木的参数表示的是列表的编号,具体代码如下:

Scratch算法编程:冒泡排序算法

交换元素自制积木


第三步,创建自制积木,用于排序操作,根据前面的描述,排序需要用到双重循环,同时需要使用两个变量i和j分别表示蓝色棋子和红色棋子的位置,我们编写代码如下:

Scratch算法编程:冒泡排序算法

冒泡排序自制积木


第四步,调用自制积木进行排序,并查看排序结果,程序如图所示:

调用自制积木进行冒泡排序


运行效果

程序运行效果如图所示:

冒泡排序运行效果


往期 精彩 回顾