编程语言应用

首页 » 常识 » 预防 » 宇哥编程算法练习冒泡排序的原理基于VB
TUhjnbcbe - 2023/8/29 19:48:00
刘*连简介 http://m.39.net/news/a_9361607.html

今天分享一下我近期学习冒泡算法的一些心得体会。

讲之前我先插一句:

凡是觉得VBA太Low、Access没用、冒泡算法“不实用”的“编程大牛”、“IT人士”们,请你们自动绕行、再捎带手把我拉黑,慢走不送。

本次跟大家分享一下我近期刚掌握的冒泡算法,冒泡算法是一种排序算法,是一种比较入门的算法。

冒泡排序分步骤算法演示

想要代码评论区留言哈~

不同计算机编程语言的算法原理是相通的,只是语法表现不同。VBA(包括VB、VB.net)的算法原理和Java、C#没有什么不同。

学会了一门语言下的算法、别的语言算法掌握也不难,可谓一通百通。

这个案例中,VBA冒泡排序算法练习要实现的目标如下:

1.生成若干随机数(上节课已经讲了)

2.按照从小到大(从大到小)排序

3.利用冒泡算法实现自动化排序、并演示操作过程

冒泡排序2

知识点1:冒泡算法的原理

冒泡算法类似于穷举法,把一个数列里所有的相邻数据进行对比。

冒泡排序3

对于一个数组下的一列数列:

第1项和第2项对比,

第2项和第3项对比,

第3项和第4项对比,

第n-1项和第n项对比。

如果第n-1项比第n项大,那么n-1项和项数值互换。从第1项开始两两对比,一直比到最后一项。

这种比较具体到ForNext循环里,表现为每比较两个数字,把大的往后排小的往前走。

刚开始第1项和第2项比,如果第1项是5比第2项3大,于是就和第2项数值互换,第2项变成5(注意编号是不会变的,变的是同一个编号下的数值)

第3项是1,和第2项5(刚换)对比,比5小,于是两项数值互换,第3项变成5。

以此类推,直到把数列所有的数据两两比较一次(术语叫遍历?)。然后回到第1项数据再重头到尾比较一次。

知识点2冒泡算法的VBA代码

图示里冒泡算法的VBA代码。代码主要原理是引入一个变量t,然后针对要排序的数组,生成两个子数组,我们姑且称之为子数组1、2。

子数组1永远比子数组2顺序往前错一位,母数组如果编号是,那么子数组1编号是,子数组2编号是(注意是顺序编号不是数值)

注意子数组是中间变量,并不真正存在,有临时性质,只起到过度和便于理解的作用。

然后遍历母数组,第一次遍历对比两个子数组,小数在前大数在后。

我举的例子有10个数字需要排序,因此最多遍历9次就可以排序成功。

VBA代码我总结了两种,第1种直接一步到位排序,第2种是分步骤展示排序过程:

第1种:一种判断相邻数大小的方法

Fori=1To-1

Forj=i+1To

Ifa(i)a(j)Then

t=a(i)

a(i)=a(j)

a(j)=t

EndIf

Nextj

Nexti

第2种:分步骤演示/另一种判断相邻数大小

Fori=0To8

Forj=1To9-i

Ifa(j)a(j+1)Then判断相邻数大小

t=a(j)换位操作

a(j)=a(j+1)

a(j+1)=t

EndIf

Nextj

分步骤演示排序过程

Fork=1To10

Text2=Text2+tempStr+CStr(a(k))

Ifk=10Then

tempStr=Chr(13)+Chr(10)+""

Else

tempStr=""

EndIf

Nextk

Nexti

知识点3冒泡排序的特点

每一次排序都把比较大的数往后压,比较小的数往前挤。

我们有一个神奇的发现,这个池子最大的数一开始就被被往下压到最后,比较小的数每次都被不停的在往上挤,跟气泡确实很像。所以这个算法叫冒泡算法。

我们可以看到这个算法的优点是比较容易理解、好上手。

缺点也很明显,如果10个数排序,最极端的情况下需要两两比较9次,那就是的情况。但是多数情况下不需要排9次。

图片里用了7次排序就排好了,但是依然要遍历9次~

这就是冒泡排序比较笨的地方,必须全部遍历才可以。

有更好的排序方法,我学会了跟大家演示。

1
查看完整版本: 宇哥编程算法练习冒泡排序的原理基于VB