Buscador

Ordenacin rpida con valor de referencia al comienzo

La tcnica a seguir en este caso es muy similar al anterior algoritmo, pero cambiando la posicin de la cual obtenemos el valor de referencia. El Cdigo fuente 213 muestra un ejemplo.

' algoritmo de ordenacin rpida estableciendo como valor
' de referencia el primer elemento del array
Public Sub Main()
Dim Valores() As Integer = {51, 5, 67, 44, 72, 20, 19}
Dim PosIzquierda As Integer
Dim PosDerecha As Integer
Dim ValorRef As Integer
Dim Intercambio As Integer
' establecer ndices para los recorridos del array
' desde los elementos segundo y final respectivamente
PosIzquierda = 1 ' el segundo elemento est en la posicin 1 del array
PosDerecha = UBound(Valores)
' establecer el primer elemento como valor de referencia a comparar
ValorRef = Valores(0) ' el primer elemento est en la posicin 0 del array
While PosIzquierda <= PosDerecha
' recorrer hasta encontrar un valor mayor que el de referencia
While (Valores(PosIzquierda) < ValorRef) And _
(PosIzquierda < UBound(Valores))
PosIzquierda = PosIzquierda + 1
End While
' recorrer hasta encontrar un valor menor que el de referencia
While Valores(PosDerecha) > ValorRef
PosDerecha = PosDerecha - 1
End While
' intercambiar valores:
' el menor pasa a la izquierda --> zona de valores menores
' el mayor pasa a la derecha --> zona de valores mayores
If PosIzquierda <= PosDerecha Then
Intercambio = Valores(PosIzquierda)
Valores(PosIzquierda) = Valores(PosDerecha)
Valores(PosDerecha) = Intercambio
' actualizar ndices
PosIzquierda = PosIzquierda + 1
PosDerecha = PosDerecha - 1
End If
End While
' una vez situados todos los valores menores y mayores
' en su lado correspondiente, tomar el valor de referencia
' y mediante un intercambio, situarlo en su posicin correcta
If PosIzquierda < UBound(Valores) + 1 Then
Intercambio = Valores(PosDerecha)
Valores(PosDerecha) = Valores(0)
Valores(0) = Intercambio
Else
Intercambio = Valores(UBound(Valores))
Valores(UBound(Valores)) = Valores(0)
Valores(0) = Intercambio
End If
End Sub
Cdigo fuente 213

No hay comentarios:

Publicar un comentario