Está en la página 1de 5

BÚSQUEDAS DENTRO UN VECTOR.

- Consiste en que dado un cierto X y un


vector de elementos del mismo tipo, ver si este X se encuentra o no en el vector.

Dependiendo de que el vector este o no ordenado (en forma ascendente o


descendente), se pueden aplicar 2 tipos de búsqueda.

Búsqueda Lineal.- Que se aplica a un vector que no este ordenado, lo cual


requiere comparar el elemento a buscar con cada uno de los elementos del vector.
Este método, requiere en promedio N/2 comparaciones para encontrar un
elemento, que si se encuentra en el vector. Si no esta en el vector,
irremediablemente debemos recorrer por todo el vector para saber que no esta.

Un sub-programa que efectúa la búsqueda lineal de un elemento en un vector es


el que se muestra a continuación. Este sub-programa solo es aplicable a números
enteros.

// función que efectuara la búsqueda del elemento X en el vector V


// V es el vector donde efectuaremos la búsqueda,
// N la cantidad de elementos de V y
// X el elemento a buscar en el vector V
// esta función devolverá -1 si no existe X en el vector, o un valor
// mayor o igual a cero, que representa su índice dentro el vector
Funcion BusquedaLineal(int V[], int N, int X)
Int pos, k
INICIO
pos  -1 // inicialmente decimos que no existe
Para k=0, N-1
Si X=V[k] // si cumple esta condición, existe
Entonces pos  k : k  N-1 // se toma su índice
FinSi
FinPara
Devolver pos
FIN

Este sub-programa devuelve el valor de –1 si el elemento buscado (o sea X) no se


encuentra en el vector. De lo contrario devuelve el indice en el vector, de este
elemento buscado. Adicionalmente, se asigna el valor de N-1 a K una vez que se
ha encontrado X, esto para obligar a salir de la estructura repetitiva Para, ya que
no tiene sentido seguir con la búsqueda.

La codificación correspondiente en el Lenguaje JAVA se muestra a continuación,


junto con el programa principal que lo invoca. Para ejecutarlo en otro lenguaje,
solo debe codificar el pseudo-codigo a dicho lenguaje y ejecutarlo. En Visual
Basic, encontrara ejemplos de aplicación de este metodo de busqueda en este
mismo, en los temas de vectores y/o cadenas.

// BUSQUEDA LINEAL en un VECTOR de ENTEROS <busquedaLineal.java>


// por HUV
import java.io.*;
class BusLineal
{
// SUB-PROGRAMA que busca x en el arreglo mediante la búsqueda lineal
static void busquedaLineal(int u[ ], int x)
{ int k=0,p=-1;
for (int i=0; I < u.length; i++)
{ k++; System.out.println("\t+ Intento "+k+": el indice es i="+i);
if (x==u[i])
{p=i; i=u.length;}
}

System.out.print("EL RESULTADO ES: ");


if (p!=-1) // COMO QUIERA QUE SE ENCONTRO ....
System.out.println(x + " SI esta, tiene el indice " + p+"\n");
else // NO SE LO ENCONTRO, LUEGO ....
System.out.println(x + " NO esta en el vector.\n");
}

// SUB-PROGRAMA que carga y muestra el arreglo


static void leeArreglo(int z[ ])
{ int i;
for (i=0; i<z.length ; i++) // cargando el arreglo
z[i] = (1 + (int) (Math.random()*99)) % 20; // % equivale a mod
for (i=0; i<z.length ; i++) // mostrando el arreglo
System.out.print("|"+z[i]);
System.out.println("|");
}

Y el programa principal es el siguiente:


// PROGRAMA PRINCIPAL
public static void main(String a[])
{ int numero=0, z[]=new int [20];

System.out.print("El arreglo cargado es: ");


leeArreglo(z); // invoca al SUB-PROGRAMA que carga y muestra el arreglo

numero = 1 + (int) (Math.random()*20);


System.out.println("Vamos a buscar el " + numero + " ......");
busquedaLineal(z,numero); // invoca al SUB-PROGRAMA búsqueda Lineal
}
El programa genera números aleatorios en el rango de 1 a 20 y carga
automáticamente el vector. Luego genera un numero en el mismo rango (es decir
X) y efectúa su búsqueda mediante el sub-programa busquedaLineal(), enviando
los respectivos mensajes dependiendo de si lo encuentra o no en el vector.

Una corrida de este programa, para el caso en que el elemento buscado se


encuentra en el vector (X es 10 para el ejemplo), muestra lo siguiente:

Para el caso en que el elemento buscado no se encuentra en el vector(X es 14


para este caso), una corrida del mismo programa muestra lo siguiente:
Otra forma de Busqueda Lineal.-

Una forma equivalente de efectuar esta búsqueda seria usando la estructura


repetitiva Mientras, con una variable bandera y es la siguiente:

// función que efectuara la búsqueda del elemento X en el vector V


// V es el vector donde efectuaremos la búsqueda
// N la cantidad de elementos de V y
// X el elemento a buscar en el Vector V
Funcion BusquedaLineal1(int V[], int N, int X)
Int pos, k, bb
INICIO
pos  -1 : bb  0 : k0 // bb es la variable
bandera
Mientras (bb=0 y k<N)
Si X=V[k]
Entonces pos  k : bb  1
Sino kk+1
FinSi
FinPara
Devolver pos
FIN
La estructura repetitiva Mientras tiene 2 condiciones, si una de ellas se
incumple en cierto momento entonces se abandona esta estructura
repetitiva. La primera ocurre si el elemento buscado esta en el vector,
entonces bb cambia su valor a 1 y se sale de la repetición. El otro caso
es cuando k que es un contador y que además es el índice toma todos
sus valores permitidos, es decir permite recorrer todo el vector y en
todo este proceso no se encuentra a X en el, luego k deja de ser menor
a N con lo que incumple esta condición y también abandona esta
estructura repetitiva.

En el primer caso, devuelve el ultimo valor de pos que llega a ser el


índice del elemento buscado y en el segundo caso devuelve -1 que es el
valor inicial de pos y que no habría cambiado al no encontrase X en el
vector.

También podría gustarte