viernes, 14 de agosto de 2015

Método de búsqueda lineal y binaria (iterativo y recursivo) con objetos en java

Código aquí

package ejercicio;

import java.util.Date;

/**
 *
 * @author Sarurai
 */
public class Ejercicio {

    public void quickSort(Vehiculo vector[]) {
        int n = vector.length;
        quicksort(vector, 0, n - 1);

    }

    private void quicksort(Vehiculo a[], int primero, int ultimo) {
        int i, j, central;
        Vehiculo pivote;
        central = (primero + ultimo) / 2;
        pivote = a[central];
        i = primero;
        j = ultimo;
        do {
            while (a[i].compareTo(pivote) < 0) {
                i++;
            }
            while (a[j].compareTo(pivote) > 0) {
                j--;
            }
            if (i <= j) {

                Vehiculo aux = a[i]; //intercambio
                a[i] = a[j];
                a[j] = aux;
                i++;
                j--;
            }
        } while (i <= j);
        if (primero < j) {
            quicksort(a, primero, j); // mismo proceso con sublista izqda
        }
        if (i < ultimo) {
            quicksort(a, i, ultimo); // mismo proceso con sublista drcha
        }

    }

    public void listar(Vehiculo arreglo[]) {
        int pos = arreglo.length;
        for (int i = 0; i < pos; i++) {
            System.out.println((i + 1) + " : " + arreglo[i].toString());

        }
        System.out.println(".........................................................................");
    }

    public int busquedaLineal(Vehiculo[] vector, Vehiculo dato) {

        int n = vector.length;
        int pos = -1;
        for (int i = 0; ((i < n) && (pos == -1)); i++) {


            if (vector[i].compareTo(dato) == 0) {

                pos = i;

            }

        }

        return pos;
    }

    /**
     *
     * @param vector
     * @param dato
     * @return
     */
    public int busquedaBinaria(Vehiculo[] vector, Vehiculo dato) {
        Ejercicio metodo = new Ejercicio();
        metodo.quickSort(vector);
        int n = vector.length;
        int izq = 0;
        int der = n - 1;
        int centro = (izq + der) / 2;
        while ((izq <= der) && (!(vector[centro].compareTo(dato) == 0))) {
            if (dato.compareTo(vector[centro]) < 0) {
                der = centro - 1;
            } else {
                izq = centro + 1;
            }
            centro = (izq + der) / 2;


        }

        if (izq > der) {
            return -1;
        } else {

            return centro;
        }
    }

    public int busquedaLinealRec(Vehiculo[] vector, Vehiculo dato) {
        int n = vector.length;
        int i = this.busquedaLinealRecursiva(vector, dato, n - 1, 0);
        return i;
    }

    private int busquedaLinealRecursiva(Vehiculo a[], Vehiculo clave, int n, int i) {
        if (i == n + 1) {
            return -1;
        } else {
            if (a[i].compareTo(clave) == 0) {
                return i;
            } else {

                return busquedaLinealRecursiva(a, clave, n, i + 1);
            }

        }

    }

    public int busquedaBinariaRec(Vehiculo[] vector, Vehiculo dato) {
        Ejercicio metodo = new Ejercicio();
        metodo.quickSort(vector);
        int n = vector.length;
        int i = this.busquedaBinariaRecursiva(vector, 0, n - 1, dato);
        return i;
    }

    private int busquedaBinariaRecursiva(Vehiculo vector[], int izq, int der, Vehiculo dato) {

        int centro = (izq + der) / 2;
        if (izq > der) {
            return -1;
        } else if (dato.compareTo(vector[centro]) == 0) {
            return centro;
        } else if (dato.compareTo(vector[centro]) < 0) {

            return busquedaBinariaRecursiva(vector, izq, centro - 1, dato);
        } else {

            return busquedaBinariaRecursiva(vector, centro + 1, der, dato);
        }
    }

    public static void main(String[] args) {
        Ejercicio metodo = new Ejercicio();
        Vehiculo arreglo[] = new Vehiculo[5];
        arreglo[0] = new Vehiculo("ada27", 30000D, new Date(112, 10, 12));
        arreglo[1] = new Vehiculo("chj5", 27000D, new Date(100, 5, 23));
        arreglo[2] = new Vehiculo("cjk77", 40000D, new Date(109, 3, 22));
        arreglo[3] = new Vehiculo("bmn90", 35000D, new Date(104, 11, 19));
        arreglo[4] = new Vehiculo("asd31", 17000D, new Date(105, 12, 21));
        System.out.println("Arreglo con datos");
        metodo.listar(arreglo);
       
        Date dato = new Date(104, 11, 19);//podemos validar la fecha revisar entarada antigua
        System.out.println("FEcha buscada es "+ dato.toString());
        Vehiculo datoVehiculo = new Vehiculo(null, null, dato);
        int num;
        num = metodo.busquedaLineal(arreglo, datoVehiculo);
//        metodo.quickSort(arreglo);
//        num = metodo.busquedaLinealRec(arreglo, datoVehiculo);
//        num = metodo.busquedaBinaria(arreglo, datoVehiculo);// para que imprima correctamente primero tiene que ordenarlo
//        num = metodo.busquedaBinariaRec(arreglo, datoVehiculo);
        if(num>0){
            System.out.println("El elemneto encontado es "+ arreglo[num].toString());
        }else{
            System.out.println("Elemento no encontrado");
        }

    }
}

..........................................................................................................................................................
Clase Vehiculo

package ejercicio;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author Sarurai
 */
public class Vehiculo implements Comparable{
     private String placa;

    private Double precio;

    private Date fechaFabricacion;

    public Vehiculo() {
    }

    public Vehiculo(String placa, Double precio, Date fechaFabricacion) {
        this.placa = placa;

        this.precio = precio;

        this.fechaFabricacion = fechaFabricacion;
    }

    public String getPlaca() {
        return placa;
    }

    public void setPlaca(String placa) {
        this.placa = placa;
    }

    public void setPrecio(Double precio) {
        this.precio = precio;
    }

    public void setFechaFabricacion(Date fechaFabricacion) {
        this.fechaFabricacion = fechaFabricacion;
    }

    public Double getPrecio() {
        return precio;
    }

    public Date getFechaFabricacion() {
        return fechaFabricacion;
    }

    @Override
    public String toString() {
        SimpleDateFormat formateador = new SimpleDateFormat("yyyy/MM/dd");
        return "{ placa= " + placa + ", precio= " + precio + ", fechaFabricacion=" + formateador.format(fechaFabricacion) + " }";
    }

    @Override
    public int compareTo(Object o) { //comparamos String
        Vehiculo c = (Vehiculo) o;
        int fechaCmp = this.fechaFabricacion.compareTo(c.fechaFabricacion);

        return fechaCmp;// aqui solo podemos poner returm placaCmp;

    }

}
  Captura

No hay comentarios:

Publicar un comentario