ReDim 起陣列(陣列限數 - 1, 原始二維陣列數) As Variant
ReDim 迄陣列(陣列限數 - 1, 原始二維陣列數) As Variant
ReDim 基陣列(陣列限數, 原始二維陣列數) As Variant
N = 0
H = 0
K = 0
For X = 起限 To 迄限
If 原始二維陣列(X, 排序元素序) < 基準 Then
N = N + 1
For Y = LBound(原始二維陣列, 2) To UBound(原始二維陣列, 2)
起陣列(N, Y) = 原始二維陣列(X, Y)
Next Y
ElseIf 原始二維陣列(X, 排序元素序) = 基準 Then
H = H + 1
For Y = LBound(原始二維陣列, 2) To UBound(原始二維陣列, 2)
基陣列(H, Y) = 原始二維陣列(X, Y)
Next Y
Else
K = K + 1
For Y = LBound(原始二維陣列, 2) To UBound(原始二維陣列, 2)
迄陣列(K, Y) = 原始二維陣列(X, Y)
Next Y
End If
Next X
If N > 1 Then
S_二維陣列快速穩定遞增排序_01 起陣列, 1, 排序元素序, 1, N
End If
If K > 1 Then
S_二維陣列快速穩定遞增排序_01 迄陣列, 1, 排序元素序, 1, K
End If
陣列累計數 = 0
For X = 起限 To 迄限
陣列累計數 = 陣列累計數 + 1
If 陣列累計數 <= N Then
For Y = LBound(原始二維陣列, 2) To UBound(原始二維陣列, 2)
原始二維陣列(X, Y) = 起陣列(陣列累計數, Y)
Next Y
ElseIf 陣列累計數 <= (N + H) Then
For Y = LBound(原始二維陣列, 2) To UBound(原始二維陣列, 2)
原始二維陣列(X, Y) = 基陣列(陣列累計數 - N, Y)
Next Y
Else
For Y = LBound(原始二維陣列, 2) To UBound(原始二維陣列, 2)
原始二維陣列(X, Y) = 迄陣列(陣列累計數 - N - H, Y)
Next Y
End If
Next X
Else
基準 = 原始二維陣列(排序元素序, (起限 + 迄限) \ 2)
原始二維陣列數 = UBound(原始二維陣列, 1) - LBound(原始二維陣列, 1) + 1
ReDim 起陣列(原始二維陣列數, 陣列限數 - 1) As Variant
ReDim 迄陣列(原始二維陣列數, 陣列限數 - 1) As Variant
ReDim 基陣列(原始二維陣列數, 陣列限數) As Variant
N = 0
H = 0
K = 0
For Y = 起限 To 迄限
If 原始二維陣列(排序元素序, Y) < 基準 Then
N = N + 1
For X = LBound(原始二維陣列, 1) To UBound(原始二維陣列, 1)
起陣列(X, N) = 原始二維陣列(X, Y)
Next X
ElseIf 原始二維陣列(排序元素序, Y) = 基準 Then
H = H + 1
For X = LBound(原始二維陣列, 1) To UBound(原始二維陣列, 1)
基陣列(X, H) = 原始二維陣列(X, Y)
Next X
Else
K = K + 1
For X = LBound(原始二維陣列, 1) To UBound(原始二維陣列, 1)
迄陣列(X, K) = 原始二維陣列(X, Y)
Next X
End If
Next Y
If N > 1 Then
S_二維陣列快速穩定遞增排序_01 起陣列, 2, 排序元素序, 1, N
End If
If K > 1 Then
S_二維陣列快速穩定遞增排序_01 迄陣列, 2, 排序元素序, 1, K
End If
陣列累計數 = 0
For Y = 起限 To 迄限
陣列累計數 = 陣列累計數 + 1
If 陣列累計數 <= N Then
For X = LBound(原始二維陣列, 1) To UBound(原始二維陣列, 1)
原始二維陣列(X, Y) = 起陣列(X, 陣列累計數)
Next X
ElseIf 陣列累計數 <= (N + H) Then
For X = LBound(原始二維陣列, 1) To UBound(原始二維陣列, 1)
原始二維陣列(X, Y) = 基陣列(X, 陣列累計數 - N)
Next X
Else
For X = LBound(原始二維陣列, 1) To UBound(原始二維陣列, 1)
原始二維陣列(X, Y) = 迄陣列(X, 陣列累計數 - N - H)
Next X
End If
Next Y
End If
像:
Dim value
For X = 起限 To 迄限
value = 原始1維陣列(X)
If value < 基準 Then
N = N + 1: 起陣列(N) = value: 起陣列_ID(N) = IndexAR(X)
使用 value 一定比較快嗎?雖然不用反覆進行提取「原始1維陣列(X)」,但多一個「value = 原始1維陣列(X)」的動作,以前也想過這個問題。
像:
ReDim Preserve 起陣列(0 To N), 起陣列_ID(0 To N) 'reduce ram consumption
根據我的經驗,ReDim Preserve很耗時,此例可以不用嗎?當然次數或許不多,但也不少。作者: linyancheng 時間: 2017-2-14 23:26