用Scratch实现冒泡法排序—让你的鱼缸冒泡泡吧

排序的方法有很多种,今天介绍一下“冒泡法”排序。

file

冒泡法排序的原理:对相邻的元素进行两两比较,顺序相反则进行交换。这样,每一次会将最小或最大的元素“浮”到顶端,最终达到完全有序。

具体可参见上面的图示。下面用Scratch进行实现。

程序实现:下图是排序算法部分。

file

本例只对5个小球进行排序,所以循环上限是5次。

其中,列表“序号”中存放了需要排序的内容。变量i是外循环计数,循环次数为5;变量j是内循环计数,循环次数是5-i。

难点一:为什么内循环的次数是5-i?

由于是两两进行比较,所以第一次比较时,只需要比较4次就可以了。而第一次运行时,外循环变量i=1,所以这时5-1=4;

第二次执行内循环时,由于最大的已经冒泡到顶部,只剩下4个元素。这4个元素,也只要比较3次就可以。而这时外循环变量i=2,刚好5-2=3。后面的依次类推。

难点二:如何引用数组结构中的元素?

在Scratch中没有提供“数组”这种数据结构,但是提供了“列表”。数组可以通过列表来实现。

例如,有数组A,它有5个元素。则每个元素分别为A(1)、A(2)、A(3)、A(4)和A(5)。有的编程语言数组的下标从0开始,有的从1开始。有的编程语言支持对数组的整体操作,有的只能一个元素一个元素的访问。

Scratch中只有列表,所以只能通过下标,一个个的访问。

“交换”部分程序如下:

file

难点三:如何交换两个数据?

在程序中,两个变量必须通过第三个变量才能实现交换。因为在大部分编程语言中,等号的含义是“赋值”。

所以有的编程语言为了进行区分,将赋值号写成“:=”的形式。例如:

file

其含义是将100这个值赋予变量a。

因此直接写成下列形式,是不能交换变量a和b的值的:

file

执行第一条语句时,将变量b的值赋予了变量a,这时变量a的值已经等于变量b了。所以执行第二条语句时,只是再一次把值赋予变量b。变量a的值丢失了。

通常采用中间变量来实现交换。例如:

file

这里temp就是中间变量。注意其中的次序不能搞错。

让我们来看看静态的效果:

file

黔西南 触摸未来
我们正身处一个只要愿意思考,就能改变世界的时代