整理出四个整数:VBA Excel

时间:2016-01-15 12:53:18

标签: vba sorting integer

我有四个整数存储在变量中。找到最大,第二大,第三,最小的方法是什么?如果没有编写长代码,是否有一种优雅的方式?

2 个答案:

答案 0 :(得分:1)

排序整数的最优雅和最常用的方法是QuicksortBubblesort算法。

但如果你只有四个整数,这可能有点矫枉过正。所以你也可以实现一个简单的if-else算法。

<强>快速排序

Private Sub QuickSort( _ 
                      ByRef ArrayToSort As Variant, _ 
                      ByVal Low As Long, _ 
                      ByVal High As Long) 
Dim vPartition As Variant, vTemp As Variant 
Dim i As Long, j As Long 
  If Low > High Then Exit Sub  
  vPartition = ArrayToSort((Low + High) \ 2) 
  i = Low: j = High 
  Do 
    Do While ArrayToSort(i) < vPartition 
      i = i + 1 
    Loop 
    Do While ArrayToSort(j) > vPartition 
      j = j - 1 
    Loop 
    If i <= j Then 
      vTemp = ArrayToSort(j) 
      ArrayToSort(j) = ArrayToSort(i) 
      ArrayToSort(i) = vTemp 
      i = i + 1 
      j = j - 1 
    End If 
  Loop Until i > j 
  If (j - Low) < (High - i) Then 
    QuickSort ArrayToSort, Low, j 
    QuickSort ArrayToSort, i, High 
  Elsea 
    QuickSort ArrayToSort, i, High 
    QuickSort ArrayToSort, Low, j 
  End If 
End Sub

<强>冒泡

For j = UBound(ArrayToSort) - 1 To LBound(ArrayToSort) Step -1 

    For i = LBound(ArrayToSort) To j 
      If ArrayToSort(i) > ArrayToSort(i + 1) Then  
        vTemp = ArrayToSort(i) 
        ArrayToSort(i) = ArrayToSort(i + 1) 
        ArrayToSort(i + 1) = vTemp 
      End If 
    Next i 
  Next j

Code from german MSDN

答案 1 :(得分:1)

可以使用5个if / swap语句(排序网络)对4个元素进行排序:

    if (a[0] > a[2]) { swap(a[0], a[2]); }
    if (a[1] > a[3]) { swap(a[1], a[3]); }
    if (a[0] > a[1]) { swap(a[0], a[1]); }
    if (a[2] > a[3]) { swap(a[2], a[3]); }
    if (a[1] > a[2]) { swap(a[1], a[2]); }