VBA 二维数组冒泡排序实例

VBA程序 专栏收录该内容
2 篇文章 0 订阅

学习VBA的同学经常会用到数组的排序,网上介绍的程序算法一般都是举例一维数组,

而一般实际使用时更多的需要对二维数组进行排序,本人结合大家分享的冒泡排序算法

编写了二维数组的冒泡排序实例,供大家参考。

增加了升降序选择,排序列号选择,以及标题行数等实际需要使用的参数


Private Sub test()
Dim arr()
Sheets("sheet1").Select
Row = Sheets("sheet1").UsedRange.Rows.count
col = Sheets("sheet1").UsedRange.Columns.count
ReDim arr(1 To Row, 1 To 6)
arr = Range("a1:F" & Row)

arr = bubblesort(arr, 0, 2, 2)

Range("j1:O" & Row) = arr

End Sub

以下为VBA二维数组冒泡排序实例
Public Function bubblesort(ByRef snarray(), sort As Boolean, column As Integer, title As Integer)
'sort 为升降序标记,column为需排序列,title为标题行数(不参与排序的行数)
Dim iouter As Long
Dim iinner As Long
Dim ilbound As Long
Dim iubound As Long
Dim issort As Boolean
Dim count As Integer
Dim temp As Integer
Dim itemp
ReDim itemp(1, LBound(snarray, 2) To UBound(snarray, 2))
Dim SORTED As Integer
lastindex = 0
tlbound = LBound(snarray, 2)
tubound = UBound(snarray, 2)
ilbound = LBound(snarray) + title
iubound = UBound(snarray)
SORTED = iubound - iouter - 1
Select Case sort
Case 0 '参数为0时升序
For iouter = ilbound To iubound - 1
        issort = True

    For iinner = ilbound To SORTED 'iubound - iouter - 1
        If snarray(iinner, column) > snarray(iinner + 1, column) Then
            
            For temp = tlbound To tubound '数组整行数据交换
            itemp(1, temp) = snarray(iinner, temp)
            snarray(iinner, temp) = snarray(iinner + 1, temp)
            snarray(iinner + 1, temp) = itemp(1, temp)
            Next temp
            
            issort = False  '标记是否有排序动作
            count = count + 1   '记录排序次数,可删除
            lastindex = iinner  '记录最后排序位置
        End If

       Next iinner
       
       If issort = True Then Exit For   '如果没有排序动作则为全部排序完成,跳出循环,排序结束
       SORTED = lastindex   '接下来的循环只到最后排序位置

Next iouter

Case 1 '参数为1时降序
For iouter = ilbound To iubound - 1
        issort = True

    For iinner = ilbound To SORTED 'iubound - iouter - 1
        If snarray(iinner, column) < snarray(iinner + 1, column) Then
            
            For temp = tlbound To tubound '数组整行数据交换
            itemp(1, temp) = snarray(iinner, temp)
            snarray(iinner, temp) = snarray(iinner + 1, temp)
            snarray(iinner + 1, temp) = itemp(1, temp)
            Next temp
            
            issort = False  '标记是否有排序动作
            count = count + 1   '记录排序次数,可删除
            lastindex = iinner  '记录最后排序位置
        End If

       Next iinner
       
       If issort = True Then Exit For   '如果没有排序动作则为全部排序完成,跳出循环,排序结束
       SORTED = lastindex   '接下来的循环只到最后排序位置

Next iouter

End Select

Sheets(1).Range("I1") = count 
bubblesort = snarray
End Function

 

  • 2
    点赞
  • 1
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

塞内加

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值