Buscador

Bsqueda binaria

En el caso de que el array est ordenado, la bsqueda binaria proporciona un algoritmo ms veloz para la localizacin de datos. Esta tcnica consiste en proporcionar el array ordenado y obtener el valor a buscar. A continuacin se comprueba si el valor se encuentra en el intervalo de valores del array, abandonando el proceso si no lo est. 
En el caso de que el valor se encuentre entre los valores del array, se calcula la posicin central del array y se comprueba si en dicho elemento est el valor. Si no es as, se comprueba, partiendo del elemento central, si el valor est en la primera o segunda mitad del array, haciendo sucesivas divisiones a su vez dentro de estas dos partes, y comprobando el valor de su elemento central. El Cdigo fuente 208 muestra un ejemplo del caso.

' algoritmo de bsqueda binaria de una letra en un array
Public Sub Main()
' en los elementos del array no debe faltar ninguna letra,
' las letras deben estar todas consecutivas o se puede
' entrar en un bucle infinito
Dim Letras() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I"}
Dim LetraBuscada As String
Dim PosicCentral As Integer
Dim PosicPrimera As Integer
Dim PosicUltima As Integer
Console.WriteLine("Introducir letra a buscar")
' obtener valor a buscar
LetraBuscada = Console.ReadLine()
' inicializar valores
PosicPrimera = 0
PosicUltima = UBound(Letras)
' si la letra no est en el array, finalizar
If LetraBuscada < Letras(PosicPrimera) Or _
LetraBuscada > Letras(PosicUltima) Then
Console.WriteLine("Letra fuera de intervalo")
Exit Sub
End If
' si la letra est en el intervalo comenzar a buscar
Do
' calcular la posicin central del array
PosicCentral = (PosicPrimera + PosicUltima) / 2
' si se encuentra la letra, finalizar
If Letras(PosicCentral) = LetraBuscada Then
Console.WriteLine("Letra encontrada la posicin {0}", PosicCentral + 1)
Exit Do
End If
' si no se ha encontrado la letra:
' si la letra es menor que la que est
' en la posicin central del array, asignar
' como ltima posicin la que hasta ahora
' era la central
If LetraBuscada < Letras(PosicCentral) Then
PosicUltima = PosicCentral
Else
' si la letra es mayor que la que est
' en la posicin central del array, asignar
' como primera posicin la que hasta ahora
' era la central
PosicPrimera = PosicCentral
End If
Loop
Console.ReadLine()
End Sub
Cdigo fuente 208

No hay comentarios:

Publicar un comentario