跳轉到內容

Visual Basic for Applications/氣泡排序一維陣列

來自華夏公益教科書,開放的教科書,用於開放的世界

本頁討論的是對一維陣列的排序。這些通常用於將列表放入具有Array方法的變體中。在VBA中找到這樣的排序例程比較少見,因為大多數排序是在二維中進行的。

氣泡排序一維陣列

[編輯 | 編輯原始碼]
  • 過程BubbleSort1DArray()使用最慢的排序方法。但是,這裡這樣做似乎沒有缺點,因為很少有列表能達到很大的尺寸。有升序或降序排序選項,以及返回方法。如果提供了一個返回陣列,它將被使用,否則將透過在其中返回來更改輸入陣列。

程式碼模組

[編輯 | 編輯原始碼]
Function BubbleSort1DArray(vIn As Variant, bAscending As Boolean, Optional vRet As Variant) As Boolean
    ' Sorts the single dimension list array, ascending or descending
    ' Returns sorted list in vRet if supplied, otherwise in vIn modified
        
    Dim First As Long, Last As Long
    Dim i As Long, j As Long, bWasMissing As Boolean
    Dim Temp As Variant, vW As Variant
    
    First = LBound(vIn)
    Last = UBound(vIn)
    
    ReDim vW(First To Last, 1)
    vW = vIn
    
    If bAscending = True Then
        For i = First To Last - 1
            For j = i + 1 To Last
                If vW(i) > vW(j) Then
                Temp = vW(j)
                vW(j) = vW(i)
                vW(i) = Temp
                End If
            Next j
        Next i
    Else 'descending sort
        For i = First To Last - 1
            For j = i + 1 To Last
                If vW(i) < vW(j) Then
                Temp = vW(j)
                vW(j) = vW(i)
                vW(i) = Temp
                End If
            Next j
        Next i
    End If
  
   'find whether optional vRet was initially missing
    bWasMissing = IsMissing(vRet)
   
   'transfers
   If bWasMissing Then
     vIn = vW  'return in input array
   Else
     ReDim vRet(First To Last, 1)
     vRet = vW 'return with input unchanged
   End If
   
   BubbleSort1DArray = True

End Function
華夏公益教科書