解释
主函数GuiBingPaiXu
参数:GuiBingPaiXu(ByVal arr, Optional sj = 1, Optional nCol = 1)
arr
是排序数组,可以1维或者2维sj
是升序还是降序,默认1升序,非1是降序nCol
是二维数组要排序得第几列,默认第一列
代码如下
'1参数是排序数组,可以1维或者2维
'2参数是升序还是降序,默认1升序,非1是降序
'3参数是2维数组要排序得第几列,默认第一列
Function GuiBingPaiXu(ByVal arr, Optional sj = 1, Optional nCol = 1)
Dim nWeidu&, k&, arrData, nLast&, nlastCol&, nRow&, arrjg, nStart&, i, j
On Error Resume Next
nWeidu = UBound(arr, 2)
On Error GoTo 0
If nWeidu = 0 Then '一维数组
MergeSort_BottomUp arr
If sj = 1 Then
arrjg = arr
Else
ReDim arrjg(LBound(arr) To UBound(arr))
nStart = LBound(arr)
nLast = UBound(arr)
For i = nLast To nStart Step -1
k = k + 1
arrjg(k) = arr(i)
Next
End If
Else
'构造一个带序号得两列数组
nLast = UBound(arr): nlastCol = UBound(arr, 2)
ReDim arrjg(1 To nLast, 1 To nlastCol)
ReDim arrData(1 To nLast, 1 To 2)
For i = 1 To nLast
arrData(i, 1) = arr(i, nCol)
arrData(i, 2) = i
Next
If sj = 1 Then
MergeSort_BottomUp2 arrData
For i = 1 To nLast
For j = 1 To nlastCol
nRow = arrData(i, 2)
arrjg(i, j) = arr(nRow, j)
Next
Next
Else
MergeSort_BottomUp3 arrData
For i = nLast To 1 Step -1
k = k + 1
For j = 1 To nlastCol
nRow = arrData(i, 2)
arrjg