No.48 详细解释VB冒泡排序,具体到每一句代码。
Posted 爱VB
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了No.48 详细解释VB冒泡排序,具体到每一句代码。相关的知识,希望对你有一定的参考价值。
上一节课我们学习了什么是冒泡排序(),以及冒泡排序的排序过程。今天我们来学习一下如何用代码来实现。
大家先来回忆一下昨天的图,我们在程序中排序,就得有实际数值,所以我把每位同学都给出实际的身高值。
然后我们在程序中把他们的身高放入数组中来进行排序。因为数组具有有序性,方便进行循环操作:
为了和排序后进行比较,我们在排序之前先输出当前的身高顺序:
UBound函数代表数组的最大上界,之前我们学过,在这里代表最后的那名同学。
排序之前我们先把框架搭好,我们想一下昨天排序的过程,一共5个人,比较了4轮,也就是说外边这层循环应该是:
第二层循环我们再定义一个变量j,这个变量j就代表每轮比较的次数:
框架写好了,我们开始比较,再看一下第一个图:
我们是在每轮中比较,所以是在j循环中比较。
上面我们已经声明了数组,从头开始,当小明是a(0)的时候,小张是a(1),换成变量j,当小明是a(j),小张就是a(j+1),这里大家能不能明白?所以当a(j)>a(j+1)的时候,他俩就交换位置:
这里还有一个问题,如何让两个变量进行交换?直接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)的值:
这样一来,如果前面的值大于后面的值,就进行交换,所有的循环结束以后,顺序也就排好了。
最后我们把排好的数值输出:
运行效果:
我们上一篇文章说过,当一轮比较完成后,最后一位就是最大的,下一轮没必要再跟最后一位比较,所以这个代码还可以优化,我们再定义一个变量n,让这个变量初始值为第一轮的最后一个位置:
n = UBound(a) - 1
为什么要让数组最后一位-1呢?因为比较的时候有a(j+1),当j循环到数组最后一位的时候,j+1就超出数组的元素了,会出错。所以每轮比较只到数组最后一位的前一位即可,绕迷糊了没?
每轮比较完成后 n-1 就可以了:
全部代码如下:
到此为止,冒泡排序完成,大家可以照着做一做。
源码我放在:
今天收到腾讯的邀请开通付费文章,今天迫不及待想试一下,象征性的收1毛钱,体验一下收稿费的感觉,但是设置以后发现最低收费1元,于是我就撤销了,能力有限,水平一般,全靠各位支持,不敢强制收费
以上是关于No.48 详细解释VB冒泡排序,具体到每一句代码。的主要内容,如果未能解决你的问题,请参考以下文章