我有四个整数存储在变量中。找到最大,第二大,第三,最小的方法是什么?如果没有编写长代码,是否有一种优雅的方式?
答案 0 :(得分:1)
排序整数的最优雅和最常用的方法是Quicksort和Bubblesort算法。
但如果你只有四个整数,这可能有点矫枉过正。所以你也可以实现一个简单的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
答案 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]); }