vlambda博客
学习文章列表

No.48 详细解释VB冒泡排序,具体到每一句代码。

点击上方“爱VB”  关注我们
No.48 详细解释VB冒泡排序,具体到每一句代码。



上一节课我们学习了什么是冒泡排序(),以及冒泡排序的排序过程。今天我们来学习一下如何用代码来实现。


大家先来回忆一下昨天的图,我们在程序中排序,就得有实际数值,所以我把每位同学都给出实际的身高值。


No.48 详细解释VB冒泡排序,具体到每一句代码。


然后我们在程序中把他们的身高放入数组中来进行排序。因为数组具有有序性,方便进行循环操作:


No.48 详细解释VB冒泡排序,具体到每一句代码。


为了和排序后进行比较,我们在排序之前先输出当前的身高顺序:



No.48 详细解释VB冒泡排序,具体到每一句代码。


No.48 详细解释VB冒泡排序,具体到每一句代码。


UBound函数代表数组的最大上界,之前我们学过,在这里代表最后的那名同学。


排序之前我们先把框架搭好,我们想一下昨天排序的过程,一共5个人,比较了4轮,也就是说外边这层循环应该是:


No.48 详细解释VB冒泡排序,具体到每一句代码。


第二层循环我们再定义一个变量j,这个变量j就代表每轮比较的次数:



No.48 详细解释VB冒泡排序,具体到每一句代码。


框架写好了,我们开始比较,再看一下第一个图:


No.48 详细解释VB冒泡排序,具体到每一句代码。


我们是在每轮中比较,所以是在j循环中比较。

上面我们已经声明了数组,从头开始,当小明是a(0)的时候,小张是a(1),换成变量j,当小明是a(j),小张就是a(j+1),这里大家能不能明白?所以当a(j)>a(j+1)的时候,他俩就交换位置:


No.48 详细解释VB冒泡排序,具体到每一句代码。


这里还有一个问题,如何让两个变量进行交换?直接a(j)=a(j+1),a(j+1)=a(j)是不对的,举个生活中的例子:

有两杯水,我想让这两个杯子里的水互换一下,A杯倒入B杯,然后B杯倒入A杯显然是不可能的,所以我们一般都会找来C杯,A倒入C,然后B倒入A,最后C倒入B,这样就完成了交换。程序中我们可以另外定义一个变量来当做第三个杯子。

所以再定义一个变量t,交换的时候让t临时储存一下前面a(j)的值:



No.48 详细解释VB冒泡排序,具体到每一句代码。



这样一来,如果前面的值大于后面的值,就进行交换,所有的循环结束以后,顺序也就排好了。

最后我们把排好的数值输出:


No.48 详细解释VB冒泡排序,具体到每一句代码。



运行效果:


No.48 详细解释VB冒泡排序,具体到每一句代码。


我们上一篇文章说过,当一轮比较完成后,最后一位就是最大的,下一轮没必要再跟最后一位比较,所以这个代码还可以优化,我们再定义一个变量n,让这个变量初始值为第一轮的最后一个位置:

n = UBound(a) - 1

为什么要让数组最后一位-1呢?因为比较的时候有a(j+1),当j循环到数组最后一位的时候,j+1就超出数组的元素了,会出错。所以每轮比较只到数组最后一位的前一位即可,绕迷糊了没?No.48 详细解释VB冒泡排序,具体到每一句代码。

每轮比较完成后 n-1 就可以了:


No.48 详细解释VB冒泡排序,具体到每一句代码。


全部代码如下:


No.48 详细解释VB冒泡排序,具体到每一句代码。


到此为止,冒泡排序完成,大家可以照着做一做。

源码我放在:


今天收到腾讯的邀请开通付费文章,今天迫不及待想试一下,象征性的收1毛钱,体验一下收稿费的感觉,但是设置以后发现最低收费1元,于是我就撤销了,能力有限,水平一般,全靠各位支持,不敢强制收费