Buscador

Fusin

Esta tcnica, tambin denominada intercalacin, consiste en mezclar el contenido de dos arrays ya ordenados en un tercer array, obteniendo como resultado un nico array ordenado. El Cdigo fuente 214 muestra un ejemplo del desarrollo de este algoritmo.

Public Sub Main()
' arrays ordenados
Dim ValoresA() As String = {"C", "F", "J"}
Dim ValoresB() As String = {"A", "G", "K", "M", "T"}
' array vaco en el que se fusionarn los dos arrays,
' este array ser ampliado durante la ejecucin del algoritmo
' para dar cabida a nuevos elementos
Dim ValoresNuevo() As String
Dim IndiceA As Integer
Dim IndiceB As Integer
Dim IndiceC As Integer
Dim Contador As Integer
' establecer los ndices de recorrido para cada array
IndiceA = 0
IndiceB = 0
IndiceC = 0
' recorrer los dos arrays que tienen valores hasta llegar
' al final de alguno de ellos
While (IndiceA <= UBound(ValoresA)) And (IndiceB <= UBound(ValoresB))
' aadir un nuevo elemento vaco al array de fusin
ReDim Preserve ValoresNuevo(IndiceC)
' comprobar de los dos arrays, cul tiene el valor menor,
' y aadirlo en la nueva posicin libre que acabamos de crear
' en el array de fusin
If ValoresA(IndiceA) < ValoresB(IndiceB) Then
ValoresNuevo(IndiceC) = ValoresA(IndiceA)
IndiceA = IndiceA + 1
Else
ValoresNuevo(IndiceC) = ValoresB(IndiceB)
IndiceB = IndiceB + 1
End If
' actualizar el ndice del array de fusin
IndiceC = IndiceC + 1
End While
' cuando hayamos terminado de recorrer el array ms pequeo,
' seguir recorriendo el array que tiene ms elementos hasta
' el final, y aadir los valores restantes en el array de fusin
If IndiceA <= UBound(ValoresA) Then
For Contador = IndiceA To UBound(ValoresA)
ReDim Preserve ValoresNuevo(IndiceC)
ValoresNuevo(IndiceC) = ValoresA(Contador)
IndiceC = IndiceC + 1
Next
Else
For Contador = IndiceB To UBound(ValoresB)
ReDim Preserve ValoresNuevo(IndiceC)
ValoresNuevo(IndiceC) = ValoresB(Contador)
IndiceC = IndiceC + 1
Next
End If
End Sub
Cdigo fuente 214

No hay comentarios:

Publicar un comentario