- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
本帖最後由 Andy2483 於 2022-12-26 13:56 編輯
回復 11# singo1232001
謝謝前輩指導
後學藉此帖習得陣列排序相關知識,請前輩再指導
執行結果:
程式碼心得註解如下:
Option Explicit
Sub SortArray()
Dim Arr, Y, i
'↑宣告變數:Arr,Y,i是通用變數
Arr = Array("4A", "5A", "6A", "7A", "2A", "4A", "6A", "1A", "2A", "3A")
'↑令Arr是一維陣列
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y是 字典
For Each i In Arr
'↑設順迴圈!令i是 Arr陣列裡的一員,從前面輪到後面
Y(i) = ""
'↑令以i變數值為key,item是空字元,放入Y字典中
Next
Arr = Y.KEYS()
'↑令Arr倒調原來陣列值,換裝Y字典key組成的陣列值
QuickSort Arr, LBound(Arr), UBound(Arr)
'↑給QuickSort這自訂函數3個 變數令其回傳值
'1.ar變數: Arr陣列
'2.iLo&: LBound(Arr):Arr陣列最小索引號數
'3.iHi&: UBound(Arr):Arr陣列最大索引號數
Debug.Print Join(Arr, ",")
'↑在即時運算窗顯示: 以","符號連結 Arr陣列值的字串結果
End Sub
Function QuickSort(ByRef ar, ByVal iLo As Long, ByVal iHi As Long)
'宣告ar是通用型變數,ByRef_指定傳遞引數的方式是呼叫程式可以變更呼叫程式內引數基礎的變數值。
'宣告iLo, iHi 是長整數,ByVal指定引數是以 傳值方式傳遞
Dim pivot As Variant, tmp As Variant, lo As Long, hi As Long
'↑宣告變數:(pivot,tmp)是通用型變數,(lo,hi)是長整數
lo = iLo
'↑令lo這通用型變數是iLo變數代的值 (Arr陣列最小索引號數)
hi = iHi
'↑令hi這通用型變數是iHi變數代的值 (Arr陣列最大索引號數)
pivot = UCase(ar((lo + hi) \ 2))
'↑令pivot是 ((Arr陣列最小索引號數+最大索引號數)/2 去尾整數值)索引號的ar陣列值再轉為大寫英文字
While lo <= hi
'↑設當lo變數<= hi變數 條件成立執行的迴圈
While (UCase(ar(lo)) < pivot And lo < iHi)
'↑設當lo變數陣列值再轉大寫 < pivot變數,而且lo變數 < iHi變數,條件成立執行的迴圈
lo = lo + 1
'↑令lo變數累加 1
Wend
While (UCase(ar(hi)) > pivot And hi > iLo)
'↑設當hi變數陣列值再轉大寫 > pivot變數,而且hi變數 > iLo變數,條件成立執行的迴圈
hi = hi - 1
'↑令hi變數逐次減 1
Wend
If lo <= hi Then
'↑如果 lo變數 <= hi變數
tmp = ar(lo)
'↑令tmp這通用型變數是 lo變數索引號的ar陣列值
ar(lo) = ar(hi)
'↑令lo變數索引號的ar陣列值是 hi變數索引號的ar陣列值
ar(hi) = tmp
'↑令hi變數索引號的ar陣列值是 tmp這通用型變數值
lo = lo + 1
'↑令lo變數累加 1
hi = hi - 1
'↑令hi變數逐次減 1
tmp = ""
'↑令tmp這通用型變數是 空字元
End If
Wend
If hi > iLo Then QuickSort ar, iLo, hi
'↑如果hi變數 > iLo變數,給QuickSort這自訂函數3個 變數令其回傳值
'1.ar變數: ar陣列
'2.iLo&: iLo變數
'3.iHi&: hi變數
If lo < iHi Then QuickSort ar, lo, iHi
'↑如果lo變數 < iHi變數,給QuickSort這自訂函數3個 變數令其回傳值
'1.ar變數: ar陣列
'2.iLo&: lo變數
'3.iHi&: iHi變數
End Function |
|