Sub BubbleSort(arr As Variant, Optional numEls As Variant, _
Optional descending As Boolean) Dim value As Variant Dim index As Long Dim firstItem As Long Dim indexLimit As Long, lastSwap As Long ' account for optional arguments If IsMissing(numEls) Then numEls = UBound(arr) firstItem = LBound(arr) lastSwap = numEls Do indexLimit = lastSwap - 1 lastSwap = 0 For index = firstItem To indexLimit value = arr(index) If (value > arr(index + 1)) Xor descending Then ' if the items are not in order, swap them arr(index) = arr(index + 1) arr(index + 1) = value lastSwap = index End If Next Loop While lastSwap End Sub BubbleSort is especially convenient with small arrays (1,000 items or fewer) or with arrays that are already almost sorted NUMELS is the index of the last item to be sorted, and is useful if the array is only partially filled. Works with any kind of array, except UDTs and fixed-length strings, and including objects if your are sorting on their default property. String are sorted in case-sensitive mode. You can write faster procedures if you modify the first two lines to account for a specific data type, eg. 'Sub BubbleSortS(arr() As Single, Optional numEls As Variant, 'Optional descending As Boolean) 'Dim value As Single |