La ordenación más conocida (y la más infame) es la ordenación
por el método de la burbuja, Su popularidad deriva de su nombre pegadizo y su
simplicidad. Sin embargo, es una de las peores ordenaciones jamás concebida.
Esta ordenación hace comparaciones repetidas y si es
necesario, intercambios de elementos adyacentes. Su nombre viene por la
similitud del método con las burbujas en un tanque de agua, donde cada burbuja
busca su propio nivel.
Option Explicit
Sub Burbuja()
Dim cont As Long
Dim a As Long, b As Long
Dim t As Long
Dim items As Variant
Dim oTimer As New clsTimer
items = Application.Transpose(Range("A1").CurrentRegion.Value)
oTimer.StartTimer
cont = UBound(items)
For a = 1 To cont
For b = cont To a + 1 Step -1
If items(b) < items(b - 1) Then
t = items(b - 1)
items(b - 1) = items(b)
items(b) = t
End If
Next
Next
MsgBox oTimer.GetElapsedTime(Seconds)
Range("C1").Resize(10000, 1).Value = Application.Transpose(items)
End Sub
La ordenación de la burbuja se conduce mediante dos bucles.
Ya que hay cont elementos en el array, el bucle externo causa que el array sea
inspeccionado cont-1 veces. Esto asegura que, en el peor caso, cada elemento
quede en su posición apropiada cuando termina la función. El bucle interno
realiza las comparaciones y los intercambios reales.
Una ordenación de la burbuja es terrible para un número
grande de elementos ya que el tiempo de ejecución está directamente relacionado
con el número de comparaciones e intercambios.
Les comparto un enlace con el código de ejemplo el cual incluye la clase clsTimer para obtener el tiempo consumido en la ordenación.
También para que sea mas entendible el como funciona este algoritmo, les dejo el siguiente video, el cual es sumamente didáctico, divertido, todo un deleite audible y visual:
Les comparto un enlace con el código de ejemplo el cual incluye la clase clsTimer para obtener el tiempo consumido en la ordenación.
También para que sea mas entendible el como funciona este algoritmo, les dejo el siguiente video, el cual es sumamente didáctico, divertido, todo un deleite audible y visual:
Lo copio y lo pego así en Excel o tengo que moverle algo en donde dice Click?
ResponderBorrarSi no puedes descargarte el archivo de ejemplo entonces no te va a funcionar por que hago uso de un modulo de clase para calcular el tiempo. En todo caso debes acceder al editor de VBA y poner sl siguiente código y debes de tener una serie de números en la columna A empezando desde la celda A1:
ResponderBorrarOption Explicit
Sub Burbuja()
Dim cont As Long
Dim a As Long, b As Long
Dim t As Long
Dim items As Variant
items = Application.Transpose(Range("A1").CurrentRegion.Value)
cont = UBound(items)
For a = 1 To cont
For b = cont To a + 1 Step -1
If items(b) < items(b - 1) Then
t = items(b - 1)
items(b - 1) = items(b)
items(b) = t
End If
Next
Next
Range("C1").Resize(10000, 1).Value = Application.Transpose(items)
MsgBox "Ordenación realizada!"
End Sub