viernes, 14 de agosto de 2015

Métodos de ordenación burbuja, selección, inserción, shellSort, MergeSort y QuickSort con objetos en java

Código Aquí


package ejercicio;


import java.util.Date;

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

    /**
     *
     * @param vector
     *
     */
    public void ordSeleccion(Vehiculo[] vector) {

        int indiceMenor, i, j, n;
        n = vector.length;

        for (i = 0; i < n - 1; i++) {
// comienzo de la exploración en índice i
            indiceMenor = i;
// j explora la sublista a[i+1]..a[n-1]
            for (j = i + 1; j < n; j++) {
                if (vector[j].compareTo(vector[indiceMenor]) < 0) {
                    indiceMenor = j;
                }
            }
            // sitúa el elemento mas pequeño en a[i]
            if (i != indiceMenor) {

                Vehiculo aux = vector[i];
                vector[i] = vector[indiceMenor];
                vector[indiceMenor] = aux;

            }
        }


    }

    /**
     *
     * @param vector
     *
     */
    public void ordInsercion(Vehiculo[] vector) {
        int n = vector.length;

        int i, j;
        Vehiculo aux;
        for (i = 1; i < n; i++) {
            /* indice j es para explorar la sublista a[i-1]..a[0] buscando la
             posicion correcta del elemento destino*/
            j = i;
            aux = vector[i];
// se localiza el punto de inserción explorando hacia abajo
            while (j > 0 && (aux.compareTo(vector[j - 1]) < 0)) {
// desplazar elementos hacia arriba para hacer espacio
                vector[j] = vector[j - 1];
                j--;
            }
            vector[j] = aux;

        }


    }

    /**
     *
     * @param vector
     *
     */
    public void burbuja(Vehiculo[] vector) {
        int n = vector.length;
        for (int i = 0; i < n - 1; i++) // sitúa mínimo de a[i+1]...a[n-1] en a[i]
        {
            for (int j = i + 1; j < n; j++) {
                if ((vector[i].compareTo(vector[j])) > 0) {
                    Vehiculo aux = vector[i];
                    vector[i] = vector[j];
                    vector[j] = aux;

                }
            }
        }


    }

    /**
     *
     * @param vector
     *
     */
    public void shellSort(Vehiculo[] vector) {
        int intervalo, i, j, k;
        int n = vector.length;
        intervalo = n / 2;
        while (intervalo > 0) {
            for (i = intervalo; i < n; i++) {
                j = i - intervalo;
                while (j >= 0) {
                    k = j + intervalo;
                    if (vector[j].compareTo(vector[k]) <= 0) {
                        j = -1; // par de elementos ordenado
                    } else {

                        Vehiculo aux = vector[j];//intercambio
                        vector[j] = vector[j + 1];
                        vector[j + 1] = aux;

                        j -= intervalo;
                    }
                }
            }
            intervalo = intervalo / 2;
        }

    }

    /**
     *
     * @param vector
     *
     */
    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 mergeSort(Vehiculo arreglo[]) {
        int n = arreglo.length;
        Vehiculo tmpArray[] = new Vehiculo[n];

        mergeSort(arreglo, tmpArray, 0, n - 1);

    }

    private void mergeSort(Vehiculo a[], Vehiculo b[], int izq, int der) {
        int centro;
        if (izq < der) {
            centro = (izq + der) / 2;
            mergeSort(a, b, izq, centro);
            mergeSort(a, b, centro + 1, der);
            fusion(a, b, izq, centro + 1, der);
        }
    }

    private void fusion(Vehiculo a[], Vehiculo b[], int izq, int centro, int der) {
        int finalIzq, nroelem, tmp;
        finalIzq = centro - 1;
        tmp = izq;
        nroelem = der - izq + 1;
        while ((izq <= finalIzq) && (centro <= der)) {
            if (a[izq].compareTo(a[centro]) < 0) {
                b[tmp] = a[izq];
                izq++;
            } else {
                b[tmp] = a[centro];
                centro++;
            }
            tmp++;
        }
        while (izq <= finalIzq) {
            b[tmp] = a[izq];
            tmp++;
            izq++;
        }
        while (centro <= der) {
            b[tmp] = a[centro];
            tmp++;
            centro++;
        }
        for (int i = 1; i <= nroelem; i++) {
            a[der] = b[der];
            der--;
        }
    }
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 static void main(String[] args) {
        Ejercicio metodo = new Ejercicio();
        Vehiculo arreglo[] = new Vehiculo[5];
        arreglo[0] = new Vehiculo("ada27", 30000D, new Date(1183282843222L));
        arreglo[1] = new Vehiculo("chj5", 27000D, new Date(1090092212322L));
        arreglo[2] = new Vehiculo("cjk77", 40000D, new Date(1228998294563L));
        arreglo[3] = new Vehiculo("bmn90", 35000D, new Date(1393911139902L));
        arreglo[4] = new Vehiculo("asd31", 17000D, new Date(1297484838999L));
        System.out.println("estado primero");
        metodo.listar(arreglo);
        System.out.println("estado ordenado");
//        metodo.burbuja(arreglo);
//        metodo.ordInsercion(arreglo);
//        metodo.ordSeleccion(arreglo);
//        metodo.shellSort(arreglo);
//        metodo.mergeSort(arreglo);
        metodo.quickSort(arreglo);
        metodo.listar(arreglo);


    }
}

..........................................................................................................................................................
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