当前位置:首页>游戏资讯>排序算法

排序算法

  • 2019-10-24 04:10:46

  • 新年快乐! 各位亲! 说的好像有点晚了,应该昨天晚上说来着,结果我很不幸的睡着了^_^,一早起来看到上海踩死那么多人,还大部分是妹子,瞬间赶脚好可惜,感谢大家一路的陪伴,"一路上有你,苦一点也愿意",额,不扯了,祝各位也祝我自己来年健康顺利!


    那啥,编程里面很多的排序算法,其中用的比较多的是冒泡算法,快速排序算法。


    其中冒泡算法呢,顾名思义是和气泡有关系的,其实是实现过程有点像开水沸腾了冒气泡,当气泡大到一定程度,就由于某些复杂的物理原因(物理我就不分析了,我初中物理老师是美女,我只顾着看她了, 没认真听课)会跑到水面上!冒泡排序是通过两层循环把较大的数组元素放到最外层,这样通过多次循环就达到了排序的目的。

    快速排序算法,其实是冒泡排序的一种改进,升级版吧。原理就是先在数组里面找一个参考值,然后用所有数组元素和这个参考值比较大小,比参考值大的数组元素放在一边,比参考值小的数组元素放在另一边,然后再递归的调用拆分出来的这两个数组部分(每个当成一个新数组),再找参考值,再拆分,直到拆分成每个数组都只有一个元素,在合并这些元素,就达到排序的效果了。

    这两种算法各有特点,冒泡排序逻辑比较清晰,代码实现也比较简单,数据量小使用这个方法比较方便,如果数据量大,用于算法需要多次循环,就不是很方便了,排序算法实现起来比较麻烦,代码里面还用到了递归(简单的理解就是函数体自己调用自己),比较不容易理解,但是呢这个算法有优越性,数据量大的时候,较冒泡要快。

    VBA不像其他语言有数组排序函数,所以挺麻烦的,当然你可以使用EXCEL内置的那个SORT排序还挺快的。


    Option Explicit

    Sub Sort() '用于测试

    Dim frr As Variant

    Dim i As Integer

    frr = Array(34, 2, 1, 3, 4, 5, 6, 8, 7)

    QuickSort frr, LBound(frr), UBound(frr)

    'BubbleSort frr

    For i = LBound(frr) To UBound(frr)

    Debug.Print frr(i)

    Next i

    End Sub


    Private Sub BubbleSort(ByRef Arr As Variant) '冒泡排序

    Dim i As Integer, j As Integer

    Dim tmp As Variant

    For i = LBound(Arr) To UBound(Arr) - 1

    For j = i + 1 To UBound(Arr)

    If Arr(i) > Arr(j) Then

    tmp = Arr(i)

    Arr(i) = Arr(j)

    Arr(j) = tmp

    End If

    Next j

    Next i

    End Sub


    Private Sub QuickSort(ByRef Arr As Variant, L0 As Integer, B0 As Integer) '快速排序

    Dim L As Integer

    Dim B As Integer

    Dim key As Integer

    L = L0: B = B0

    key = Arr(L0)

    If (L0 >= B0) Then Exit Sub

    While (L <> B)

    While (L < B And Arr(B) >= key)

    B = B - 1

    Wend

    Arr(L) = Arr(B)

    While (L < B And Arr(L) <= key)

    L = L + 1

    Wend

    Arr(B) = Arr(L)

    Wend

    Arr(L) = key

    If L <= B And L0 <= L - 1 Then QuickSort Arr, L0, L - 1

    If L <= B And L + 1 <= B0 Then QuickSort Arr, L + 1, B0

    End Sub


    上面这俩过程阔以放你的代码模块里面排序一维数组!哦了,吃饭去了!


    http://pan.baidu.com/s/1nt7gERv