宇哥教你用VBA玩转冒泡排序
创作时间:
作者:
@小白创作中心
宇哥教你用VBA玩转冒泡排序
引用
CSDN
等
7
来源
1.
https://blog.csdn.net/hhhhh_51/article/details/124333750
2.
https://blog.csdn.net/qq_39660799/article/details/120269387
3.
https://blog.csdn.net/m0_74737305/article/details/133846021
4.
https://blog.csdn.net/aaron19822007/article/details/124647770
5.
https://club.excelhome.net/thread-1486048-1-1.html
6.
http://www.360doc.com/content/22/0215/15/78635869_1017513964.shtml
7.
https://club.excelhome.net/forum.php?mod=viewthread&tid=118580&extra=page%3D1&mobile=2
在Excel数据处理中,排序是一个常见的需求。虽然Excel本身提供了排序功能,但在某些情况下,我们可能需要通过VBA代码来实现更复杂的排序逻辑。今天,我们就来学习如何用VBA实现经典的冒泡排序算法。
01
冒泡排序原理
冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的列表,比较相邻元素,如果顺序错误就交换他们,直到没有需要交换的元素为止。这个过程类似于水中的气泡逐渐上浮,因此得名“冒泡排序”。
具体步骤如下:
- 从第一个元素开始,比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。
- 重复上述过程,直到最后一个元素。
- 完成一轮比较后,最大的元素会被“冒泡”到正确的位置。
- 重复上述过程,但每次可以减少比较的次数,因为每轮结束后,最后一个元素已经是正确的。
02
VBA代码实现
下面是一个完整的VBA代码示例,实现了冒泡排序算法:
Sub BubbleSort()
Dim arr As Variant
Dim i As Long, j As Long
Dim temp As Variant
' 示例数组(可根据需要修改)
arr = Array(5, 3, 8, 6, 2, 7, 1, 4)
' 外层循环控制遍历次数
For i = LBound(arr) To UBound(arr) - 1
' 内层循环进行相邻元素比较
For j = LBound(arr) To UBound(arr) - i - 1
If arr(j) > arr(j + 1) Then
' 交换元素
temp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
End If
Next j
Next i
' 输出排序结果到调试窗口
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
03
代码解析
数组声明和初始化:
Dim arr As Variant
:声明一个变体类型的数组。arr = Array(5, 3, 8, 6, 2, 7, 1, 4)
:初始化数组,这里使用了一个示例数组。
外层循环:
For i = LBound(arr) To UBound(arr) - 1
:控制遍历次数。LBound
和UBound
函数分别获取数组的最小和最大索引。
内层循环:
For j = LBound(arr) To UBound(arr) - i - 1
:进行相邻元素的比较。每次外层循环后,最大的元素会被“冒泡”到正确位置,因此内层循环的范围可以逐渐减小。
元素交换:
If arr(j) > arr(j + 1) Then
:如果前一个元素大于后一个元素。temp = arr(j)
,arr(j) = arr(j + 1)
,arr(j + 1) = temp
:通过临时变量temp
完成元素交换。
输出结果:
Debug.Print arr(i)
:将排序后的数组元素输出到VBA调试窗口。
04
实际应用
在实际工作中,我们通常需要对Excel工作表中的数据进行排序。下面是一个示例,演示如何从工作表中读取数据,进行排序后再输出:
Sub SortWorksheetData()
Dim ws As Worksheet
Dim arr As Variant
Dim lastRow As Long
Dim i As Long, j As Long
Dim temp As Variant
' 设置工作表
Set ws = ThisWorkbook.Sheets("Sheet1")
' 获取数据区域的最后一行
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 将数据读取到数组
arr = ws.Range("A1:A" & lastRow).Value
' 冒泡排序
For i = LBound(arr) To UBound(arr) - 1
For j = LBound(arr) To UBound(arr) - i - 1
If arr(j, 1) > arr(j + 1, 1) Then
temp = arr(j, 1)
arr(j, 1) = arr(j + 1, 1)
arr(j + 1, 1) = temp
End If
Next j
Next i
' 将排序后的数据写回工作表
ws.Range("B1:B" & lastRow).Value = arr
End Sub
在这个示例中:
- 从工作表的A列读取数据到数组
- 使用冒泡排序算法对数组进行排序
- 将排序后的数据输出到B列
05
注意事项
- 数组索引:VBA数组的索引默认从0开始,但可以通过
Option Base 1
语句改为从1开始。 - 数据类型:确保数组中的数据类型一致,避免在比较和交换时出现错误。
- 性能考虑:冒泡排序的时间复杂度为O(n²),对于大数据量的排序效率较低。在实际应用中,如果数据量较大,可以考虑使用更高效的排序算法。
通过以上步骤,你就可以在Excel中使用VBA实现冒泡排序了。虽然冒泡排序不是最高效的排序算法,但它简单易懂,非常适合初学者学习和掌握。
热门推荐
父母去世后如何办理死亡证明和户籍注销
脑筋急转弯:孩子变聪明的秘密武器
跟着手绘地图打卡湛江必玩景点
警方全力追查失踪人口,助力团圆年
寻人网助力失踪人员家属心理辅导
头条寻人:科技助力22859个家庭团圆
寻找失踪人员:公安+网络平台双管齐下最有效
失踪人口寻找互助信息系统上线,助力寻人网
地球或面临被黑洞吞噬风险,但科学家称概率极低
黑洞临近地球:行星轨道混乱与文明存续危机
雪村:一夜成名后的人生起落与艺术坚持
《东北人都是活雷锋》再走红,雪村:名利如浮云
乐透中奖概率大揭秘:从数据分析到真实案例
神奇!加拿大5名陌生人组团买彩票,中3200万巨奖领奖时才首次见面
美国牵头十国制定6G原则,中国5.5G技术实现突破
荆紫关:三省交界处的明清商贸重镇,700间古建诉说着昔日繁华
内家拳教你练出“整力”,全身肌肉up up!
姚宗勋的意拳革新:武术基本功在现代搏击的应用
贺州打卡圣地:黄姚古镇&姑婆山
黄姚古镇:贺州必打卡的千年古镇
周末打卡黄姚古镇,穿越千年的美丽
电热毯防火秘籍,让你安心过冬
电热毯使用不当,小心变“伤人凶器”
当众演讲技巧:从准备到结尾的完整指南
老鹳草:祛风湿止泻痢,现代研究证实抗菌抗病毒
四川发布高考新政:思政等四科采用等级赋分,30分起算
信息如何“瞬移”?揭秘通信背后的科技力量
低轨卫星与5G融合:打造无处不在的通信网络
皮蛋瘦肉粥:一碗暖胃又营养的健康早餐
皮蛋瘦肉粥:粤菜界的夜宵王者