使用自己定義的泡沫排序法 VBA 函數,處理陣列排序問題。
對於普通陣列的排序而言,快速排序法是效率最高的排序方法(實作請參考 Excel VBA 快速排序教學),但是快速排序法的演算法牽涉到遞迴,如果想要進行客製化的修改,就比較不方便。
如果資料量不大的情況,可以改用泡沫排序法,程式碼簡單易懂,修改也方便。
泡沫排序 VBA 巨集函數
以下是泡沫排序法的 VBA 巨集函數:
' 泡沫排序函數 Public Sub BubbleSort(arr As Variant) idxMin = LBound(arr) idxMax = UBound(arr) For i = idxMin To idxMax - 1 For j = i + 1 To idxMax If arr(i) > arr(j) Then ' 判斷條件 temp = arr(i) arr(i) = arr(j) arr(j) = temp End If Next j Next i End Sub
這段排序程式碼是以遞增的方式排序元素,如果想要修改排序規則,只要修改判斷條件的那一行即可,修改上很方便。例如將大於改成小於,就變成遞減排序。
數值陣列排序
這是使用泡沫排序法來排序數值陣列的範例:
Sub Test() ' 建立測試用陣列 Dim arr As Variant arr = Array(2, 5, 4, 1, 3) ' 對陣列進行排序 BubbleSort arr ' 輸出結果 For i = LBound(arr) To UBound(arr) Debug.Print "元素 " & i & " = " & arr(i) Next i End Sub
執行後的結果會像這樣:
文字陣列排序
這裡的泡沫排序 VBA 巨集函數也可以用來處理文字的資料:
Sub Test() ' 建立測試用陣列 Dim arr As Variant arr = Array("Red", "Yellow", "Green", "Blue") ' 對陣列進行排序 BubbleSort arr ' 輸出結果 For i = LBound(arr) To UBound(arr) Debug.Print "元素 " & i & " = " & arr(i) Next i End Sub
執行後的結果會像這樣:
參考資料:Access Excel