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 : k0 // bb es la variable bandera Mientras (bb=0 y k<N) Si X=V[k] Entonces pos k : bb 1 Sino kk+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.