我正在寻找 VBA 中数组的合适排序实现。快速排序是首选。或者除冒泡或合并之外的任何其他排序算法都可以。
请注意,这是为了与 MS Project 2003 一起使用,因此应避免任何 Excel 本机函数和任何 .net 相关的内容。
在 VBA 中实现像 QuickSort 这样的排序算法可以高效地完成。下面是 VBA 中用于排序数组的 QuickSort 实现:
此实现将与 VBA 中的数组一起使用,并且不依赖于 Excel 特定的函数,因此适合在 MS Project 2003 中使用。
维巴复制代码Sub QuickSort(arr As Variant, ByVal low As Long, ByVal high As Long) Dim pivotIndex As Long If low < high Then pivotIndex = Partition(arr, low, high) QuickSort arr, low, pivotIndex - 1 QuickSort arr, pivotIndex + 1, high End If End Sub Function Partition(arr As Variant, ByVal low As Long, ByVal high As Long) As Long Dim pivot As Variant Dim i As Long Dim j As Long Dim temp As Variant pivot = arr(high) i = low - 1 For j = low To high - 1 If arr(j) <= pivot Then i = i + 1 ' Swap arr(i) and arr(j) temp = arr(i) arr(i) = arr(j) arr(j) = temp End If Next j ' Swap arr(i + 1) and arr(high) temp = arr(i + 1) arr(i + 1) = arr(high) arr(high) = temp Partition = i + 1 End Function Sub TestQuickSort() Dim myArray As Variant Dim i As Long ' Initialize the array myArray = Array(34, 7, 23, 32, 5, 62) ' Call QuickSort QuickSort myArray, LBound(myArray), UBound(myArray) ' Output the sorted array For i = LBound(myArray) To UBound(myArray) Debug.Print myArray(i) Next i End Sub
QuickSort
arr
low
high
Partition
TestQuickSort
此 QuickSort 实现应该可以有效地满足您在 MS Project 2003 中的排序需求,而无需依赖任何外部库或 Excel 特定的函数。