3,1,2)。三個數排序最簡練的是兩兩比較交換(網狀排序 / 冒泡變體):
If a > b Then Swap a, b
If b > c Then Swap b, c
If a > b Then Swap a, b ' 關鍵:前兩步可能打亂 a,b 順序
此邏輯僅需 3 次比較,無需循環,極適合固定三元素場景。
Option Explicit
Private Sub Command1_Click()
Dim inputStr As String
Dim nums(1 To 3) As Double
Dim i As Integer, pos As Integer
Dim token As String
' 1. 獲取輸入
inputStr = Text1.Text
If Trim(inputStr) = "" Then
MsgBox "請輸入三個數字,用逗號分隔!", vbExclamation
Exit Sub
End If
' 2. 解析逗號分隔字符串
' 簡易解析:用 Split 函數 (VB6 自帶)
Dim parts() As String
parts = Split(inputStr, ",")
If UBound(parts) + 1 <> 3 Then
MsgBox "必須輸入三個數字!", vbExclamation
Exit Sub
End If
' 3. 轉換為數值,簡單錯誤處理
On Error GoTo ParseError
For i = 0 To 2
nums(i + 1) = Val(Trim(parts(i))) ' Val 自動忽略前導空格,非數字返回 0
Next i
On Error GoTo 0
' 4. 排序 (網狀排序)
If nums(1) > nums(2) Then Swap nums(1), nums(2)
If nums(2) > nums(3) Then Swap nums(2), nums(3)
If nums(1) > nums(2) Then Swap nums(1), nums(2)
' 5. 輸出結果
Label1.Caption = "排序結果: " & nums(1) & ", " & nums(2) & ", " & nums(3)
Exit Sub
ParseError:
MsgBox "輸入包含非數字字符!", vbCritical
End Sub
' 交換輔助子程序
Private Sub Swap(ByRef x As Double, ByRef y As Double)
Dim tmp As Double
tmp = x
x = y
y = tmp
End Sub
Text1:輸入框Command1:按鈕「排序」Label1:顯示結果若未來需擴展,可改用動態數組 + 冒泡/快速排序:
Private Sub SortArray(arr() As Double)
Dim i As Long, j As Long, tmp As Double
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
Split 返回 0-based 數組,注意下標轉換。Val("123abc") = 123,嚴格驗證請用 IsNumeric 配合 CDbl。Sub Swap(ByRef x, ByRef y) 必須用 ByRef,否則交換無效。VB6.0 實現三數逗號分隔排序,關鍵在於 Split 解析輸入、Val 轉數值、三元素網狀排序邏輯。上述代碼可直接放入按鈕點擊事件運行,界面簡單直觀,適合教學與小工具開發。