QuickSort para OOo Basic

Este procedimiento para ordenar matrices es, en la gran mayoría de casos, más rápido que el método de la burbuja.

Para conocer más sobre estos métodos puedes consultar las siguientes páginas: método Burbuja; método QuickSort

Ejemplo:

Sub Prueba()
Dim aDatos()
      aDatos = Array( "hola", "23", "12", "adiós", 20, 14, "¿qué tal?", "Hola" )
     QuickSort aDatos
     MsgBox Join( aDatos, chr(10) )
End Sub

El código del procedimiento es el siguiente:

Sub QuickSort( a(), optional p As long, optional u As long )  
Dim i As long, j As long, m, t

    p = iif(IsMissing( p ), lBound(a), p )
    u = iif(IsMissing( u ), uBound(a), u )
   
    i = p
    j = u
    m = a((p + u) / 2)
   
    While (i <= j)
          While (a(i) < m And i < u) : i = i + 1 : Wend
          While (m < a(j) And j > p) : j = j - 1 : Wend
           
          If (i <= j) Then
              t = a(i)
              a(i) = a(j)
              a(j) = t
              i = i + 1 :    j = j - 1
          End If
    Wend

    If (p < j) Then QuickSort(a, p, j)
    If (i < u) Then QuickSort(a, i, u)

End Sub