网站首页 > 精选教程 正文
今天分享一下我近期学习冒泡算法的一些心得体会。
讲之前我先插一句:
凡是觉得VBA太Low、Access没用、冒泡算法“不实用”的“编程大牛”、“IT人士”们,请你们自动绕行再捎带手把我拉黑,慢走不送。
本次跟大家分享一下我近期刚掌握的冒泡算法,冒泡算法是一种排序算法,是一种比较入门的算法。
想要代码评论区留言哈~
不同计算机编程语言的算法原理是相通的,只是语法表现不同。VBA(包括VB、VB.net)的算法原理和Java、C# 没有什么不同。
学会了一门语言下的算法、别的语言算法掌握也不难,可谓一通百通。
这个案例中,VBA冒泡排序算法练习要实现的目标如下:
1.生成若干随机数(上节课已经讲了)
2.按照从小到大(从大到小)排序
3.利用冒泡算法实现自动化排序、并演示操作过程
知识点1:冒泡算法的原理
冒泡算法类似于穷举法,把一个数列里所有的相邻数据进行对比。
对于一个数组下的一列数列:
第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顺序往前错一位,母数组如果编号是123456789,那么子数组1编号是12345678,子数组2编号是23456789(注意是顺序编号不是数值)
注意子数组是中间变量,并不真正存在,有临时性质,只起到过度和便于理解的作用。
然后遍历母数组,第一次遍历对比两个子数组,小数在前大数在后。
我举的例子有10个数字需要排序,因此最多遍历9次就可以排序成功。
VBA代码我总结了两种,第1种直接一步到位排序,第2种是分步骤展示排序过程:
第1种:一种判断相邻数大小的方法
For i = 1 To 100 - 1
For j = i + 1 To 100
If a(i) > a(j) Then
t = a(i)
a(i) = a(j)
a(j) = t
End If
Next j
Next i
第2种:分步骤演示/另一种判断相邻数大小
For i = 0 To 8
For j = 1 To 9 - i
If a(j) > a(j + 1) Then '判断相邻数大小
t = a(j) '换位操作
a(j) = a(j + 1)
a(j + 1) = t
End If
Next j
'分步骤演示排序过程
For k = 1 To 10
Text2 = Text2 + tempStr + CStr(a(k))
If k = 10 Then
tempStr = Chr(13) + Chr(10) + " "
Else
tempStr = " "
End If
Next k
Next i
知识点3冒泡排序的特点
每一次排序都把比较大的数往后压,比较小的数往前挤。
我们有一个神奇的发现,这个池子最大的数一开始就被被往下压到最后,比较小的数每次都被不停的在往上挤,跟气泡确实很像。所以这个算法叫冒泡算法。
我们可以看到这个算法的优点是比较容易理解、好上手。
缺点也很明显,如果10个数排序,最极端的情况下需要两两比较9次,那就是9876543210的情况。但是多数情况下不需要排9次。
下方?图片里用了7次排序就排好了,但是遍历?还是用了?9次?,有些啰嗦?。
给自己的课做个广告哈~
- 上一篇: 看动画学算法之:排序-冒泡排序
- 下一篇: 西门子SCL语言编程实例——冒泡排序
猜你喜欢
- 2024-12-04 程序入门:冒泡排序(C++)
- 2024-12-04 算法学习-JavaScript冒泡排序与选择排序
- 2024-12-04 西门子SCL编程实例——冒泡排序算法(更新版)
- 2024-12-04 python冒泡排序
- 2024-12-04 C语言 冒泡排序
- 2024-12-04 Python中的关键算法之”冒泡排序“
- 2024-12-04 西门子SCL语言编程实例——冒泡排序
- 2024-12-04 看动画学算法之:排序-冒泡排序
- 2024-12-04 西门子SCL编程实例—冒泡排序算法的实现
- 2024-12-04 Python实现冒泡排序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)