domingo, 21 de octubre de 2012

Búsqueda secuencial en un arreglo usando Java


Tal vez también te interese Búsqueda binaria en un arreglo usando Java

Saludos a todos.

Antes de iniciar, debemos familiarizarnos con el concepto de arreglo, he aquí la definición por Wikipedia:

Arreglo: Es una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo.

Para efectos de ésta explicación visualice el arreglo como una serie de cajas unidas donde podemos almacenar datos del mismo tipo, los arreglos están indexados con una serie de números de van de menor a mayor y que sirven para hacer referencia a cada uno de las cajas dentro del arreglo, en java esta indices comienzan en 0.



Los arreglos y en general las estructuras de datos nos permiten almacenar informacion o datos, pero ahora nos seria de utilidad hallar la forma de encontrar los datos que almacenamos en las mismas, para tal fin se han diseñados algoritmo de búsquedas.

Como el titulo lo sugiere trataremos el método de búsqueda secuencial.

Los dos elementos fundamentales a tener en cuentas son: un arreglo con datos objeto de la búsqueda y un elemento o criterio de búsqueda.



El método de búsqueda secuencial consiste en ir comparando el elemento o criterio de búsqueda con cada uno de los elementos en el arreglo, esto se hace recorriendo el arreglo y deteniéndose en cada elemento y hacer la comparación, en caso de ser verdadera la comparación, guardar la posición el elemento o dato.

He aquí el código:

public  int busquedaSecuencial(int []arreglo,int dato){
 int posicion = -1;
  for(int i = 0; i < arreglo.length; i++){//recorremos todo el arreglo
      if(arreglo[i] == dato){//comparamos el elemento en el arreglo con el buscado
    posicion = i;//Si es verdadero guardamos la posicion
    break;//Para el ciclo
   }
 }
 return posicion;
}
Este método nos halla la posición del elemento o dato buscado pero en su primero coincidencia, si queremos que nos halle la posición de la ultima coincidencia, lo único que tenemos que hacer es eliminar la linea donde aparece 'break'.
Si el resultado del método anterior es -1, significa que el elemento no se encuentra en el arreglo.
Ahora cabe la pregunta, ¿y si el elemento que deseo buscar aparece varias veces en el arreglo y yo deseo conocer cada una de estas posiciones, como hago?
Lo que hacemos es deshacernos de la linea 'break' para que el vector sea recorrido en su totalidad, y de alguna forma ir almacenando cada una de las posiciones resultantes de las comparaciones verdaderas.
He aquí el código:

public String busquedaSecuencial2(int []arreglo,int valor){
 String posicion = "";
  for(int i = 0; i < arreglo.length; i++){
   if(arreglo[i] == valor){
    posicion += i+",";    
   }
  }
 return posicion;
}
Aunque pude haber usado un 'ArrayList' o 'Vector' preferí usar un 'String' porque asumo que el lector de éste articulo está mas familiarizado con esta ultima que con los dos primeros términos.
Como siempre esperando que lo escrito les sea de utilidad.



7 comentarios:

  1. amig@ esto me sirvio mucho excelente informacion

    ResponderBorrar
  2. man, me podes ayudar con una tabla de posiciones, de futbol, como puedo aplicar este metodo pero no en filas sino en columnas?

    ResponderBorrar
  3. Hola, pues lo que he hecho es búsqueda en un array, que puede ser fila o columna según desde donde lo mires.

    Para buscar dentro de una tabla es muy parecido, ten en cuenta que una tabla es un array bidimensional, tienes que tener en cuenta dos criterios, filas y columnas.

    En una JTable para recuperar el contenido de una celda se suele acceder de la siguiente forma:

    Object objeto = tabla.getModel().getValueAt(fila,columna);

    Prueba esto y me cuentas como te fue, no lo he probado

    public int busquedaSecuencial(JTable tabla,int columna,String dato){
    int posicion = -1;
    int cantidadFila = tabla.getModel().getRowCount();
    for(int i = 0; i < cantidadFila; i++){//recorremos todo el arreglo
    if(tabla.getModel().getValueAt(i,columna).equals(dato)){//comparamos el elemento en el arreglo con el buscado
    posicion = i;//Si es verdadero guardamos la posicion
    break;//Para el ciclo
    }
    }
    return posicion;
    }

    //la variable columna representa la columna de la tabla donde deseas buscar

    ResponderBorrar
  4. Como realizar una busqueda pero con Do While

    ResponderBorrar
  5. Soy nuevo en esto y la verdad no entiendo bien como agregar el código a mi método quicksort.

    ResponderBorrar
  6. Si el método recibe un vector ordenado es mucho más eficiente el algoritmo
    private static int busquedaSecuencial_Ord( int []arreglo, int dato) //Arreglo ordenado asc
    {
    int posicion = 0, i = 0, cont = 0;
    while ( i < arreglo.length && dato >= arreglo[i] )
    {//recorremos el arreglo
    cont++;
    if( arreglo[i] == dato ) //comparamos el elemento en el arreglo con el buscado
    {
    System.out.println("veces1: " + cont );
    return i;//Si es verdadero guardamos la posicion
    }
    i++;
    }
    System.out.println("veces2: " + cont );
    return -1; //No lo encontro
    }

    ResponderBorrar

Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...