Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序四个整数:VBA Excel_Vba_Sorting_Integer - Fatal编程技术网

排序四个整数:VBA Excel

排序四个整数:VBA Excel,vba,sorting,integer,Vba,Sorting,Integer,变量中存储了四个整数。找到最大的、第二大的、第三大的和最小的是什么?有没有一种优雅的方法可以不用编写长代码就完成这项工作?最优雅、最常见的整数排序方法是和算法 但是如果你只有四个整数,这可能有点过分了。因此,您还可以实现一个简单的if-else算法 快速排序 Private Sub QuickSort( _ ByRef ArrayToSort As Variant, _ ByVal Low As Long

变量中存储了四个整数。找到最大的、第二大的、第三大的和最小的是什么?有没有一种优雅的方法可以不用编写长代码就完成这项工作?

最优雅、最常见的整数排序方法是和算法

但是如果你只有四个整数,这可能有点过分了。因此,您还可以实现一个简单的
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

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


您可以使用Excel中的大小函数。您介意将其解释为代码示例吗?抱歉,我理解这个问题是基于工作表范围的,而不是4个变量。谢谢!虽然看起来不容易理解,但我会尝试一下!谢谢我想知道代码是用什么语言写的?“交换”方法是否可以在Excel中使用VBA,或者有其他选择吗?它是用于交换函数的伪代码或C++的名称空间STD。要交换a和b,使用名为t的临时变量,使用| t=a | a=b | b=t |。这是一个例子。
    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]); }